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

ben*_*rre 35 java orm hibernate jpa

我有一个关于Hibernate使用的简单问题.我一直通过注释类的字段以及通过在相应的bean上注释get方法,以两种方式之一看到人们使用JPA注释.

我的问题如下:注释字段和bean方法与JPA annoations(如@Id)之间是否存在差异.

例:

@Entity
public class User
{

**@ID**
private int id;

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

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

}
Run Code Online (Sandbox Code Playgroud)

- - - - - -要么 - - - - - -

@Entity
public class User
{


private int id;

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

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

}
Run Code Online (Sandbox Code Playgroud)

Ste*_*rla 43

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

Hibernate注解参考指南,已被证明是这样的问题,一个非常有用的资源,并详细介绍访问类型如何向下级联层次.


duf*_*ymo 15

是的,我相信你想搜索字段与财产访问:

Hibernate Annotations - 哪个更好,字段或属性访问?

Spring首选项是字段访问权限.这就是我所遵循的.


小智 5

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

  • AbstractEntity
  • StringIdEntity
  • AutoIdEntity

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

如果您注释方法,您标记getId()@Transient/abstractinAbstractEntity然后在子类中,您只需覆盖该方法并应用您希望使用的策略。我曾经自己注释字段并遇到了这个问题,并决定我将始终注释前进的方法。

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