2010-09-02 63 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

相關問題