是注释字段和注释方法(通常是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
...
}
答案 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
...
}