Блокирование обновления или вставки сущности при использовании Cascade в Hibernate

У меня есть объект EntHesaplasma, этот объект связан с объектом EntCariHareketler. У меня есть внешний ключ в сущности EntHesaplasma для EntCariHareketler. Я хочу установить отношения между ними, но я не хочу обновлять, вставлять или удалять операции над объектом 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 ответ

Решение
  1. Если вы никогда не хотите изменять EntCariHareketlerВы можете просто аннотировать его с помощью @Immutable.

  2. Если ваша сущность изменчива, но вы хотите отключить обновления с другой стороны, вам нужно установить false insertable а также updatable@JoinColumn атрибут:

    @OneToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="carihareketid", insertable = false, updatable = false)
    public EntCariHareketler getCarihareket() {
        return carihareket;
    }
    
Другие вопросы по тегам