【发布时间】:2015-02-21 18:37:17
【问题描述】:
我迫切希望使我的项目能够正常工作,基本上我所拥有的是数据库中的公司和产品表。我想在这两者之间建立单向关系,但是我无法在 Company 对象中填写产品列表。我在 StackOverflow 上找到的就是这个答案
实体是 Java 对象。 Java的基本规则并没有改变 因为类上有@Entity注解。
所以,如果你实例化一个对象并且它的构造函数没有 初始化其中一个字段,该字段初始化为null。
是的,您有责任确保构造函数 初始化集合,或者所有方法处理 字段的可空性。
原件可以在这里找到。 JPA OneToMany - Collection is null
所以我问,如果我必须在构造函数中填写列表,那么拥有这些注释有什么意义?
编辑:
一些代码只是举例... 公司对象
@OneToMany(cascade = CascadeType.ALL, mappedBy = "company", fetch = FetchType.EAGER)
private transient List<Product> productList;
还有 Product 对象
@ManyToOne(optional = false,fetch = FetchType.EAGER)
@JoinColumn(name = "company", referencedColumnName = "id")
private Company company; //however, in database I have field of type int as a foreign key, I dont need company object here...
编辑 2:
我知道通过使用
new Company(); 它不会填满 ProductList 但我得到公司的方式是
em.createNamedQuery("Company.findById", Company.class).setParameter("id", id).getResultList();
最终编辑: 删除瞬态关键字就可以了。
很抱歉,我没有想到“瞬态”会导致问题。那是我因为懒惰而犯的错误。我使用瞬态是因为它在使用 GSON 序列化时造成了一些麻烦,并且有两个选项可以使它工作,一个是使用 Expose 注释,另一个是瞬态的,这看起来是个好主意。我试图让它工作得太辛苦,但没有意识到真正的问题在哪里,所以再次抱歉,这个问题毫无意义。我认为即使使用 OneToMany 注释它也不会填满我的列表
【问题讨论】:
标签: jpa