我有分为类别的实体。每个实体都可以属于许多类别,因此我有一对多的关联。
下面正确地进行了ORM编辑:
@OneToMany
@Access(AccessType.FIELD)
private Set<Category> parents = new HashSet<Category>();
public Set<Category> getParents() {
return parents;
}
public boolean addParent(Category parent) {
return parents.add(parent);
}
public boolean removeParent(Category parent) {
return parents.remove(parent);
}
我的具体问题是我是否需要使用@Access注释?如果我不使用它,那么Hibernate将如何知道不会映射getParents
getter?
答案 0 :(得分:4)
我不知道您是否需要@Access(AccessType.FIELD)
注释,因为这取决于某些默认值(见下文)。
但是,如果您使用字段访问类型(默认情况下或@Access(AccessType.FIELD)
),那么
Hibernate将直接访问FIELD而不使用getter或setter!
有关访问类型确定算法的详细信息,请参阅Hibernate Reference, chapter 5.1.4.1.2. Access type。
默认情况下,类层次结构的访问类型由@Id或@EmbeddedId注释的位置定义。如果这些注释位于某个字段上,则只考虑字段的持久性,并通过该字段访问该状态。如果注释是在getter上,那么只考虑getter的持久性,并通过getter / setter访问状态。这在实践中运作良好,是推荐的方法。