Id列的Hibernate示例

Id列的Hibernate示例,hibernate,Hibernate,当我使用hibernate示例API时,Id列被忽略,这非常烦人 我有一个表Temp(Id,Descr)和相应的实体 我想这样做: Temp exampleObject; exampleObject.setId(6); exampleObject.setDescr("six"); DetachedCriteria criteria = DetachedCriteria.forClass(exampleObject.getClass()).add(example); .... 生成的sql如下

当我使用hibernate示例API时,Id列被忽略,这非常烦人

我有一个表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)=?)
这是什么?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)
为什么我的身份限制被忽略

这是我的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 + "]";
    }

}

我想ID是你的主键。如果是,您是如何在HBM文件中映射ID列的。 如果将ID映射到某种外键或自动生成的数字或序列,则无法设置应用程序驱动的数字来定义主键


Hibernate为你做,你不做;不必解释说Temp.setId(9)。这将是过时的。

在仔细考虑了这个问题之后,我想出了一个解释!有些人没有理由将主键添加到“按示例查找”搜索中,因为只有一条记录具有此Id,并且使用get()或load()更简单。这就是在中忽略Id列的原因。

@列在使用@Id时是多余的,您需要添加ASSIGNED stratergy以从应用程序分配Id

@Id
@GeneratedValue(strategy = GenerationType.ASSIGNED)
public int getId() {
    return this.id;
}

谢谢你的回答。但我不认为这是一个问题。我在问题中添加了hibernate映射文件,因此您可以看到其中没有序列或外键。我有一个登录验证,需要检查primerykey用户名和密码列。