【发布时间】:2017-10-10 14:24:18
【问题描述】:
不重复
总结问题:
我有一个Order 实体,它有一个Menu 列表,每个Menu 都有一个Item 列表,它是一个抽象类。详情见下文。
抽象类:
@Entity
@Inheritance( strategy = InheritanceType.TABLE_PER_CLASS )
public abstract class Item implements Serializable{
@Id
@GeneratedValue( strategy = GenerationType.TABLE,generator = "ItemIDGenerator" )
@TableGenerator( table = "SEQUENCES", name = "ItemIDGenerator" )
protected Long id;
//.....
}
还有我的具体课程:
@Entity
public class ItemA extends Item{
}
@Entity
public class ItemB extends Item{
}
@Entity
public class ItemC extends Item{
}
这些具体实体的表已经存在于数据库中。
然后:
@Entity
public class Menu implements Serializable{
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Long id;
//one directional relation
@OneToMany( fetch = FetchType.EAGER, orphanRemoval = false )
@JoinTable( name = "menu_item", joinColumns = { @JoinColumn( name = "ID_MENU", referencedColumnName = "id" ) }, inverseJoinColumns = {@JoinColumn( name = "ID_ITEM", referencedColumnName = "id" ) } )}
private List<Item> items;//problem is here
//bi-directional
@ManyToOne(cascade = CascadeType.PERSIST )
@JoinColumn( name = "ID_ORDER", referencedColumnName = "id", unique = false )
private Order order;
}
最后:
@Entity
public class Order implements Serializable {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Long id;
@OneToMany( mappedBy = "order", orphanRemoval = true )
private List<Menu> menus;
}
问题是当我坚持 Menu 实体时,我有这个异常:
object references an unsaved transient instance - save the transient instance before flushing: org.domain.project.model.Item
消息很清楚,但我不知道如何继续,因为当应用程序启动时,所有具体类都在数据库中初始化。
如何告诉 JPA/Hibernate 所有 Item 子类都已保存,因此应该使用它们。
任何帮助。谢谢
【问题讨论】:
-
发布您构建并保存新菜单的代码。
-
@AlanHay 即使你的评论很笼统,它也能帮助我找到我的错误。我通过在我的项目列表中添加一个新项目来进行测试,我没有从数据库中加载它们,所以它们的 ID 在
null! .....我的错误[-_-] -
通常在child obj(mapping object)为null时会出现这个问题
-
@soorapadman 完全正确
标签: java hibernate jpa spring-boot spring-data-jpa