这个问题与Hibernate Annotation Placement Question有些相关.
但我想知道哪个更好?通过属性访问或通过字段访问?各有哪些优缺点?
我有一个关于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) 我很好奇是否有任何人在使用私有字段而不是公共getter方法注释实体之间的性能差异方面有任何硬数据.我听说过人们说字段较慢,因为它们被称为"通过反射",但是再次使用getter方法,不是吗?Hibernate需要在尝试读取字段之前将字段的可访问性设置为true,我可以看到它有一些轻微的开销.但是,不会在会话范围内的类级别上执行,或者只能在读取配置并构建SessionFactory时执行一次?
只是好奇这是否是一个神话,或者它是否真的存在真相; 我个人觉得这些字段的注释更具可读性.
对于hibernate支持,我有一个这样的域对象注释.
@Entity
@Table(name = "INPUT")
public class AppInput {
/**
* Unique id for this request
*/
@Id
@GeneratedValue
@Column(name = "INPUT_ID")
private long requestId;
/**
*
*/
@Column(name = "EMAIL_ID")
private String emailId;
/**
*
*/
@Column(name = "REQUEST_DATE")
private Date requestDate;
/**
*
*/
@Column(name = "INPUT_STATUS")
private char status;
/**
*
*/
@Column(name = "EXPECTED_ORDER_DATE")
private Date expectedOrdDt;
//Getter and setters
}
Run Code Online (Sandbox Code Playgroud)
属性emailId是一个外键,指的是User表中的say emailId列.让我说我向AppInput.java添加这样的属性
private User userDetails;
我如何对此进行注释,以便每当我从db获取AppInput时,相应的用户详细信息也会被填充?