我是否需要使用@ Access = FIELD注释与多对一关系?

时间:2012-09-16 19:16:50

标签: java hibernate annotations getter hibernate-onetomany

我有分为类别的实体。每个实体都可以属于许多类别,因此我有一对多的关联。

下面正确地进行了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?

1 个答案:

答案 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访问状态。这在实践中运作良好,是推荐的方法。