在 Hibernate 中使用级联时阻止更新或插入实体

Blocking Updating or Inserting an Entity when using Cascade in Hibernate

我有一个实体,EntHesaplasma,这个实体与 EntCariHareketler 实体有关系。我在 EntCariHareketler 的 EntHesaplasma 实体中有一个外键。我想设置它们之间的关系,但我不想更新、插入或删除 EntCariHareketler 实体上的操作。只有我想读取第二个实体 (EntCariHareketler) 上的操作。我尝试了级联类型,但我无法获得成功。

下面你可以看到我的部分实体

@Entity
@Table(name = "XOZ_HESAPLASMA")
public class EntHesaplasma {

    Integer hesaplasmaid;
    EntCariHareketler carihareket;
    String hesaplasmagrup;

    @Id
    @GeneratedValue
    @Column(name = "hesaplasmaid", unique = true, nullable = false)
    public Integer getHesaplasmaid() {
        return hesaplasmaid;
    }

    public void setHesaplasmaid(Integer hesaplasmaid) {
        this.hesaplasmaid = hesaplasmaid;
    }

    @OneToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="carihareketid")
    public EntCariHareketler getCarihareket() {
        return carihareket;
    }

public void setCarihareket(EntCariHareketler carihareket) {
    this.carihareket = carihareket;
}

@Column(name="hesaplasmagrup")
public String getHesaplasmagrup() {
    return hesaplasmagrup;
}

public void setHesaplasmagrup(String hesaplasmagrup) {
    this.hesaplasmagrup = hesaplasmagrup;
}

这是 EntCarihareketler 实体

@Entity
@Table(name = "CARI_HESAP_HAREKETLERI")
public class EntCariHareketler {

    private Integer cha_RECno;

    @Id
    @GeneratedValue
    @Column(name = "cha_recno", unique = true, nullable = false)
    public Integer getCha_RECno() {
        return cha_RECno;
    }

    public void setCha_RECno(Integer cha_RECno) {
        this.cha_RECno = cha_RECno;
    }

当我想保存 enthesaplasma 对象时,我不想更新或插入 entCariHareketler 实体,我遇到了 entcarihareketler 实体无法插入的异常。但我不想插入 entcarihareketler 实体。 hibernate 尝试插入该实体,(顺便说一句,在 entcarihareket 实体中我不使用一些属于主键的字段。我只使用 cha_Recno 作为主键。这是复合主键中的重要字段。)

Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;

try {


         EntHesaplasma hesaplasma= new EntHesaplasma();
         hesaplasma.setHesaplasmagrup("a record");
         // related entcarihareketler entity
         EntCariHareketler entCariHareketler= new EntCariHareketler();
         // we set entcarihareketler id (1212) as primary key )
         entCariHareketler.setCha_RECno(1212);

tx=session.beginTransaction();
session.save(hesaplasma); 
tx.commit();

} catch (HibernateException e) {
if (tx != null)tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
  1. 如果你永远不想修改 EntCariHareketler,你可以简单地用 @Immutable.

  2. 注释它
  3. 如果你的实体是可变的,但你想禁用来自另一方的更新,你需要设置 false insertableupdatable @JoinColumn 属性:

    @OneToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="carihareketid", insertable = false, updatable = false)
    public EntCariHareketler getCarihareket() {
        return carihareket;
    }