当我使用hibernate Example API时,Id列会被忽略,这非常烦人。
我有一个Table Temp(Id,Descr)和各自的实体。
我想这样做:
Temp exampleObject;
exampleObject.setId(6);
exampleObject.setDescr("six");
DetachedCriteria criteria = DetachedCriteria.forClass(exampleObject.getClass()).add(example);
....
,生成的sql看起来像这样
select this_.ID as ID0_0_, this_.DESCR as DESCR0_0_
from test.temp this_ where (lower(this_.DESCR)=?)
this_.ID = 6?
另一个奇怪的行为是仅使用Id:
创建示例Temp exampleObject;
exampleObject.setId(6);
DetachedCriteria criteria = DetachedCriteria.forClass(exampleObject.getClass()).add(example);
....
生成的sql是:
select this_.ID as ID0_0_, this_.DESCR as DESCR0_0_
from test.temp this_ where (1=1)
为什么忽略我的Id限制?
这是我的Hibernate映射文件:
@Entity
@Table(name = "temp", catalog = "test")
public class Temp implements java.io.Serializable {
private static final long serialVersionUID = 9123374914153833823L;
private int id;
private String descr;
public Temp() {
}
public Temp(int id) {
this.id = id;
}
public Temp(int id, String descr) {
this.id = id;
this.descr = descr;
}
@Id
@Column(name = "ID", unique = true, nullable = false)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "DESCR", length = 45)
public String getDescr() {
return this.descr;
}
public void setDescr(String descr) {
this.descr = descr;
}
@Override
public String toString() {
return "Temp [id=" + id + ", descr=" + descr + "]";
}
}
答案 0 :(得分:1)
在想到这个问题后,我想出了解释!没有理由有人通过示例搜索将主键添加到查找中,因为只有一个记录具有此Id,并且更简单地使用get()或load()。这就是Hibernate Example API中忽略Id列的原因。
答案 1 :(得分:0)
我认为ID是您的主键。如果是这样,你是如何在HBM文件中映射你的ID列的。 如果您将ID映射到某种Foriegn Key或Auto Generated数字或Sequence,那么您就无法设置应用程序驱动的数字来定义主键。
Hibernate是否适合你,你不必明确地说Temp.setId(9)。它会过时的。
答案 2 :(得分:0)
使用@Id时@Column是多余的,你需要添加ASSIGNED stratergy来从应用程序中分配id
@Id
@GeneratedValue(strategy = GenerationType.ASSIGNED)
public int getId() {
return this.id;
}