不重复
总结一下这个问题:
我有一个Order
实体,其列表为Menu
,每个Menu
都有一个Item
列表,这是一个抽象类。有关详细信息,请参阅下文。
摘要classe:
@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
子类,所以它应该使用它们。
任何帮助。感谢
答案 0 :(得分:0)
您可能需要使用多对多关系,如果您想要从菜单中删除项目而不是从所有菜单中删除项目,这也会提供更大的灵活性。
菜单&lt; - &gt; MenuItem&lt; - &gt;项目
新的MenuItem实体将包含菜单和项目的主键。