首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate/JPA -注释bean方法与字段

Hibernate/JPA -注释bean方法与字段
EN

Stack Overflow用户
提问于 2009-06-02 21:37:11
回答 5查看 46.4K关注 0票数 37

我有一个关于Hibernate用法的简单问题。我经常看到人们以两种方式之一使用JPA注释:注释类的字段和注释相应bean上的get方法。

我的问题如下:注解字段和使用@Id等JPA注解的bean方法有区别吗?

示例:

代码语言:javascript
代码运行次数:0
运行
复制
@Entity
public class User
{

**@ID**
private int id;

public int getId(){
return this.id;
}

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

}

代码语言:javascript
代码运行次数:0
运行
复制
@Entity
public class User
{


private int id;

**@ID**
public int getId(){
return this.id;
}

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

}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-02 22:42:48

是的,我相信你想搜索字段而不是属性访问:

Hibernate Annotations - Which is better, field or property access?

Spring首选项是field access。这就是我所遵循的。

票数 17
EN

Stack Overflow用户

发布于 2009-06-02 22:41:16

是的,如果您注释了字段,Hibernate将使用字段访问来设置和获取这些字段。如果您注释这些方法,hibernate将使用getter和setter。Hibernate将根据@Id注释的位置选择访问方法,据我所知,您不能混合匹配。如果你用@Id注解一个字段,那么方法上的注解将被忽略,反之亦然。还可以使用类级别批注@AccessType手动设置该方法

Hibernate Annotations reference guide已被证明是解决此类问题的一个非常有用的资源,并详细说明了访问类型如何向下层级递减。

票数 44
EN

Stack Overflow用户

发布于 2010-05-10 19:49:05

我的建议是注释这些方法。通过这样做,您可以获得一点灵活性。例如,假设您有几个类:

  • AbstractEntity
  • StringIdEntity
  • AutoIdEntity

AbstractEntity定义了id字段/getter/setter。StringIdEntityAutoIdEntity类继承自AbstractEntity,但使用不同的@Id策略。如果对字段进行了注释,则不能将其从一个类更改为另一个类。

如果您注释了这些方法,您可以在AbstractEntity中将getId()标记为@Transient/abstract,然后在子类中,您只需覆盖该方法并应用您希望使用的策略。我曾经自己对字段进行注释,并遇到了这种情况,并决定我将始终对前进的方法进行注释。

因此,即使您没有立即看到注释方法的好处,但当您有如此多的类时,它可能会变得显而易见,以至于切换将成为一个绝对令人头疼的问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/942035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档