【问题标题】:Hibernate annotation location in java filejava文件中的休眠注释位置
【发布时间】:2013-12-11 07:22:47
【问题描述】:

我正在学习“B​​eginning hibernate”一书中的休眠教程。 而且我看到像@Id,@Column这样的注解是在getXXX()方法上面指定的。

如:

@Id
@GeneratedValue
public long getId()
{
    return id;
}

@Column(unique=true)
public String getName()
{
    return name;
}

但不是在它自己喜欢的属性定义中:

private long id;
private String name;

是否有一个链接/参考来指定注释的放置位置?及其背后的原因。 进一步来说; Hibernate 是如何解释不同注解的位置的,是否有相关指南?

我说的是 javax.persistence.* 注释

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

我看过 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single

我正在使用:

Hibernate 4.2.6.Final 
Windows 8, 32 bit.

【问题讨论】:

    标签: hibernate hibernate-annotations


    【解决方案1】:

    注释可以放在字段或方法上。您选择的选项实际上是个人喜好问题,尽管我已经看到它说更喜欢字段而不是方法。

    我个人更喜欢字段注释,因为我发现它们更容易使用:

    • 所有持久性映射都位于源的顶部 文件。
    • 如果您的实体中有任何其他方法不相关 使用 JPA 映射,那么这些必须用 @Transient 注释 这“似乎是错误的”。
    • 使用属性访问时,您必须包含一个 getter 即使您不需要(尽管这可以是私人的 (或至少受到保护)。
    • 如果您想封装关联的添加/删除操作,那么 通常希望返回一个包装好的、不可修改的集合: 如果持久性映射在属性上,则无法执行此操作。

    当扫描你的类时,Hibernate 将首先查找带有 @Id 注释的字段或方法,然后会相应地查找其他映射,即。如果@Id 在一个字段上,则只会扫描其他字段:默认情况下,方法上定义的任何映射都将被忽略,反之亦然,尽管可以使用以下方法修改此行为:

    @Access(AccessType.PROPERTY)
    @Access(AccessType.FIELD)
    

    What is the purpose of AccessType.FIELD, AccessType.PROPERTY and @Access

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多