JPA 2.0字段注释与方法注释

时间:2016-11-07 10:24:20

标签: java database jpa

JPA 2.0中的

是注释字段和注释方法(通常是getter)之间的区别吗?

字段注释的示例

@Entity
public class MainEntity {

    @Id
    private Long id

    @OneToMany
    private RelatedEntity relatedEntity

    //getters and setters and possible other methods
    ...

}

方法注释的示例

@Entity
public class MainEntity {

    @Id
    private Long id;

    private RelatedEntity relatedEntity

    //getters and setters and possible other methods
    @OneToMany
    public RelatedEntity getRelatedEntity(){
           return relatedEntity
    }

    //other methods etc
    ...

 }

2 个答案:

答案 0 :(得分:1)

从用户的角度来看,在它是一致的之前没有区别,但在不同的地方使用注释会改变JPA提供程序的行为(hibernate,EclipseLink等)。

设置注释的位置为JPA提供商提供了有关您使用哪个access type的信息。如果您在两个位置混合该设置注释,则提供者选择一个并忽略休息。在第二个列表中的示例中,hibernate将忽略@Id,因为您在方法上有@OneToMany,这意味着您更喜欢使用AccessType.PROPERTY

当然有时候我们不想使用属性访问,因为我们有一些额外的方法可以提供一些逻辑并匹配命名约定。然后我们应该使用AccessType.FIELD

在项目中你应该使用一致的风格。混合样式有效,但您需要为POJO中的几乎所有元素定义@Access

答案 1 :(得分:1)

使用JPA,您可以使用这两种方法在实体类中映射表的列;字段/方法访问不会从模式生成的角度更改任何内容,也不会根据已翻译的查询进行更改。一般来说,字段注释更清晰(像Spring这样的框架鼓励它),方法注释可以为您提供更大的灵活性(比如继承自抽象实体类)。

请注意,在您的第二个示例中出现错误:

@Entity
public class MainEntity {

    private Long id;

    private RelatedEntity relatedEntity

    //getters and setters and possible other methods
    @Id
    public Long getId() {
        return id;
    }

    @OneToMany
    public RelatedEntity getRelatedEntity(){
           return relatedEntity
    }

    //other methods etc
    ...
 }