我有以下数据结构。
@Entity
public class Device extends AbstractEntity implements Serializable{
private int id;
//...
private List<Item> items;
@OneToMany(fetch=FetchType.EAGER)
public List<Item> getItems() {
return configurationItems;
}
}
每个项目都包含对设备的反向引用:
class Item {
private Device;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
public Device getDevice() {
return device;
}
}
我可以创 build 备、添加项目并保存所有这些。我可以从数据库中检索对象,除了对该项目持有的设备的引用外,一切正常。
我如何阅读这些项目并不重要: 1.读取设备与所有相关项目 2.阅读项目
设备引用始终为空。我猜我的注解 @ManyToOne 有问题。
我正在使用 hibernate 和 spring,通过继承 HibernateDaoSupport 来实现 DAO。
这是检索所有项目的代码示例:
getHibernateTemplate().loadAll(Item.class)
最佳答案
因为你有一个双向的一对多关系,你需要使用mappedBy
:
@OneToMany(fetch=FetchType.EAGER, mappedBy = "device")
public List<Item> getItems() {
return configurationItems;
}
另请参阅:
关于java - JPA @OneToMany 和@ManyToOne : back reference is null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4218273/