2010-09-02 64 views
2

我能坚持一个对象到DB从Java这样:有没有办法在没有写入查询或ID的情况下在Hibernate中加载对象?

表人:

varchar name 
varchar groupID 
varchar emailAddress 
key on (name, groupID) 

而且在Java中

Person foo = new Person("dhackner", "3"); 
session.persist(foo); 

两个论据是关键。在这种情况下,name和groupID是DB中的唯一键,因此足以清楚地标识表中的任何特定行(可以有多个“dhackner”条目,多个“group 3”条目,但只有一个“dhackner,group 3“条目)。

假设正确的设置,该代码将成功地导致

name | groupID | emailAddress 
dhackner |  3 |   "" 

我希望能够做的是相反的,而无需编写一个查询或使用任何自动生成的ID:

表人:

name | groupID | emailAddress 
dhackner |  3 | "something" 
dhackner |  4 |  "foobar" 
    other |  3 |  "barfoo" 

在Java:

Person foo = new Person("dhackner", "3"); 
foo.load(); // something like this 
Assert.assertEquals(foo.getEmailAddress(), "something"); 
+0

我相信你被允许在一定条件下自然键。你是这个意思吗?或者通常在一个独特的领域?你当然可以总是抽象掉查询 – extraneon 2010-09-02 19:29:21

回答

5

是有,它被称为query by example它是非常简单的休眠:

Person foo = new Person("dhackner", "3"); 
foo = session.createCriteria(Person.class).add(Example.create(foo)).uniqueResult(); 
Assert.assertEquals(foo.getEmailAddress(), "something"); 
+0

看起来像是可能有用的东西。 Upvoted。 – 2011-05-15 13:50:50

相关问题