javax.persistence 对字段、getter 或 setter 进行注释?

问题描述 投票:0回答:2

我目前正在学习 Hibernate 和 Java Persistence API。

我有一个@Entity类,需要将注释应用到各个字段。我已将它们可以去的所有三个地方包含在下面的代码中。

我应该将它们应用到字段本身、getter 还是 setter?这三个选项之间的语义差异(如果有)是什么?

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;

@Entity
@Table(name = "song")
public class Song { 
    // Annotations should only be applied to one of the below

    @Id 
    @Column(name="id", unique=true, nullable=false)
    private int    id;

    @Id
    @Column(name="id", unique=true, nullable=false)
    public int getId() {
        return id;
    }

    @Id
    @Column(name="id", unique=true, nullable=false)
    public void setId(int id) {
        this.id = id;
    }
}
java hibernate-mapping
2个回答
35
投票

你必须在 field 和 getter 之间做出选择。不支持 setter 上的注释。所有注释都应该位于字段上,或者都应该位于 getter 上:您不能混合使用这两种方法(除非您使用

@AccessType
注释)。

关于哪一种更可取,答案是:视情况而定。我更喜欢现场访问,但是 YMMV,并且在某些情况下更喜欢属性访问。请参阅 Hibernate 注解 - 字段访问和属性访问哪个更好?


4
投票

您必须仅为字段或仅为 getter 添加注释

@Id 
@Column(name="id", unique=true, nullable=false)
private int    id;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

private int    id;

@Id 
@Column(name="id", unique=true, nullable=false)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

对于所有字段/属性都以相同的方式。字段的所有注释或 getter 的所有注释

© www.soinside.com 2019 - 2024. All rights reserved.