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);