【发布时间】:2018-08-09 21:04:36
【问题描述】:
我有以下型号:
对应的映射如下:
引用实体
@Entity
@Table(name="Quote")
@Getter
@Setter
public class Quote {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="native")
@GenericGenerator(name = "native", strategy = "native")
@Column(name="idQuote")
private int id;
@Column(name="number")
private String number;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="Quote_idQuote")
private Set<Item> item;
}
物品实体
@Entity
@Table(name="Item")
@Getter
@Setter
public class Item {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="native")
@GenericGenerator(name = "native", strategy = "native")
@Column(name="idItem")
private int id;
@Column(name="name")
private String name;
@Column(name="Quote_idQuote")
private int quoteId;
}
我遇到的问题是我无法保留带有项目列表的报价,这是我尝试执行此操作的代码:
SessionFactory sessionFactory;
Configuration configuration= new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
Session session= sessionFactory.openSession();
session.beginTransaction();
Quote quote= new Quote();
quote.setNumber("ASR3E4E");
Set<Item> items= new HashSet<Item>();
Item item1= new Item();
item1.setName("Item 1");
Item item2= new Item();
item1.setName("Item 2");
items.add(item1);
items.add(item2);
quote.setItem(items);
session.persist(quote);
session.getTransaction().commit();
我收到以下错误:
Hibernate: insert into Quote (number) values (?)
Hibernate: insert into Item (name, Quote_idQuote) values (?, ?)
Aug 09, 2018 3:27:25 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1452, SQLState: 23000
Aug 09, 2018 3:27:25 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Cannot add or update a child row: a foreign key constraint fails (`test`.`item`, CONSTRAINT `fk_Item_Quote` FOREIGN KEY (`Quote_idQuote`) REFERENCES `quote` (`idquote`))
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:164)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:831)
鉴于上述情况,这让我想到......如何自动休眠可以保持引用及其项目。为什么hibernate不首先生成Quote的id,持久化它,然后持久化一个Items? 我应该如何进行映射以保持单向关系并且我可以毫无问题地做我正在尝试的事情?
非常感谢!
【问题讨论】:
标签: hibernate jpa hibernate-onetomany