Hibernate 我是否可以获得级联多通关系以在子实体之前查找它';谁得救了?

Hibernate 我是否可以获得级联多通关系以在子实体之前查找它';谁得救了?,hibernate,Hibernate,假设我有 @Entity @Table(name = "currency", uniqueConstraints = {}) public class Currency { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column( name = "CURRENCY_ID") private Integer currencyId; @NaturalId @Column(nam

假设我有

@Entity
@Table(name = "currency", uniqueConstraints = {})
public class Currency {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column( name = "CURRENCY_ID")
    private Integer currencyId;

    @NaturalId
    @Column(name = "CURRENCY_CODE")
    private String code;
}

@Entity
@Table(name = "price", uniqueConstraints ={})
public class Price{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PRICE_ID")
    private Integer priceId;

    @Column(name= "AMOUNT")
    private Double amount;

    @ManyToOne(fetch = FetchType.EAGER)
    @Cascade({CascadeType.ALL})
    @JoinColumn(name = "CURRENCY_ID", nullable = false)
    private Currency currency;
}
假设我在货币表中已经有一种货币,货币代码为GBP

然后我想做以下几点

Price p = new Price();
p.setAmount(3.5);
p.setCurrency(new Currency("GBP"));
sessionFactory.getCurrentSession().save(p)
目前我将获得:

Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; UK_R07G412IP03G7P3N6P5O2PARG table: CURRENCY

是否可以将Hibernate配置为在尝试级联保存操作之前尝试查找代码为GBP的货币,如果代码为GBP的货币已经存在,则只需在price对象上设置该货币的Id?

我认为不可能执行您想要的操作,在将货币实体传递给price对象之前,必须先检索货币实体。 例:

这样你就没事了

Currency curr = (Currency) session.bySimpleNaturalId(Currency.class).load("GBP");
    if (curr == null)
        curr = new Currency("GBP");
   p.setCurrency(curr);