我需要使用具有多对一关系的@Access=FIELD 注释吗?
Posted
技术标签:
【中文标题】我需要使用具有多对一关系的@Access=FIELD 注释吗?【英文标题】:Am I need to use @Access=FIELD annotation with many-to-one relationship? 【发布时间】:2012-09-16 19:16:50 【问题描述】:我有被分类的实体。每个实体可以属于许多类别,所以我有一对多的关联。
下面的 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】:我不知道你是否需要@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 访问状态。这在实践中效果很好,是推荐的方法。
【讨论】:
那么你怎么知道我不需要@Access
注释,而你却不知道我把@Id
放在哪里?
@Suzan Cioc:是的,你是对的。下次贴出完整的相关代码,方便大家答题,不用花太多空闲时间。
我不知道在这种情况下什么是相关的,抱歉。以上是关于我需要使用具有多对一关系的@Access=FIELD 注释吗?的主要内容,如果未能解决你的问题,请参考以下文章