【问题标题】:Am I need to use @Access=FIELD annotation with many-to-one relationship?我需要使用具有多对一关系的@Access=FIELD 注释吗?
【发布时间】: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?

【问题讨论】:

    标签: java hibernate annotations getter hibernate-onetomany


    【解决方案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:是的,你是对的。下次贴出完整的相关代码,方便大家答题,不用花太多空闲时间。
    • 我不知道在这种情况下什么是相关的,抱歉。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多