javax.persistence对field,getter或setter的注释?

时间:2012-01-22 22:01:06

标签: java hibernate-mapping

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

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

我应该将它们应用于场地本身,吸气剂还是定位器?这三个选项之间的语义差异(如果有的话)是什么。

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;
    }
}

2 个答案:

答案 0 :(得分:32)

你必须在场和吸气器之间做出选择。不支持setter上的注释。并且所有注释都应该在字段上,或者它们都应该在getter上:你不能混合两种方法(除非你使用@AccessType注释)。

关于哪一个更喜欢,答案是:它取决于。我更喜欢现场访问,但YMMV,并且有些情况下属性访问是可取的。请参阅Hibernate Annotations - Which is better, field or property access?

答案 1 :(得分:3)

您必须仅为字段或仅为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的所有注释