我有一个关于Hibernate用法的简单问题。我经常看到人们以两种方式之一使用JPA注释:注释类的字段和注释相应bean上的get方法。
我的问题如下:注解字段和使用@Id等JPA注解的bean方法有区别吗?
示例:
@Entity
public class User
{
**@ID**
private int id;
public int getId(){
return this.id;
}
public void setId(int id){
this.id=id;
}
}
@Entity
public class User
{
private int id;
**@ID**
public int getId(){
return this.id;
}
public void setId(int id){
this.id=id;
}
}
发布于 2009-06-02 22:42:48
是的,我相信你想搜索字段而不是属性访问:
Hibernate Annotations - Which is better, field or property access?
Spring首选项是field access。这就是我所遵循的。
发布于 2009-06-02 22:41:16
是的,如果您注释了字段,Hibernate将使用字段访问来设置和获取这些字段。如果您注释这些方法,hibernate将使用getter和setter。Hibernate将根据@Id
注释的位置选择访问方法,据我所知,您不能混合匹配。如果你用@Id
注解一个字段,那么方法上的注解将被忽略,反之亦然。还可以使用类级别批注@AccessType
手动设置该方法
Hibernate Annotations reference guide已被证明是解决此类问题的一个非常有用的资源,并详细说明了访问类型如何向下层级递减。
发布于 2010-05-10 19:49:05
我的建议是注释这些方法。通过这样做,您可以获得一点灵活性。例如,假设您有几个类:
AbstractEntity
StringIdEntity
AutoIdEntity
AbstractEntity
定义了id字段/getter/setter。StringIdEntity
和AutoIdEntity
类继承自AbstractEntity
,但使用不同的@Id
策略。如果对字段进行了注释,则不能将其从一个类更改为另一个类。
如果您注释了这些方法,您可以在AbstractEntity
中将getId()
标记为@Transient/abstract
,然后在子类中,您只需覆盖该方法并应用您希望使用的策略。我曾经自己对字段进行注释,并遇到了这种情况,并决定我将始终对前进的方法进行注释。
因此,即使您没有立即看到注释方法的好处,但当您有如此多的类时,它可能会变得显而易见,以至于切换将成为一个绝对令人头疼的问题。
https://stackoverflow.com/questions/942035
复制相似问题