2012-12-13 39 views
0

本來應該是一個nobrainer結果比我想象的更復雜一點,所以我希望有人可以幫忙。查找來自JPA的GUID

基本上我有柱式的數據庫表中的SQL Server這樣的:

CREATE TABLE [dbo].[order] (
    [orderid] [bigint] NOT NULL, 
    [uniqueid] [uniqueidentifier] NOT NULL, 
    [revision] [int] NOT NULL, 
    <lots of other stuff...> 
    CONSTRAINT [PK_order] PRIMARY KEY ([orderid]), 
    CONSTRAINT [UK_order] UNIQUE ([uniqueid], [revision]) 
) 

由(UNIQUEID,修訂版)尋找從SQL Management Studio中的訂單就像一個夢所以

SELECT * 
    FROM [order] 
WHERE [uniqueid] = '9E2822E9-4D08-4A25-8A86-ADAF8DB511CE' AND [revision] = 5; 

返回任何合適的值。

當我嘗試從我的JPA框架訪問訂單表時出現問題。這是我的訂單表實體映射:

@Entity 
@Table(name="[order]") 
public class Order implements Serializable { 
    @Id 
    private long orderid; 

    private String uniqueid; 

    private int revision; 

    <lots of other stuff...> 
} 

通過的OrderID尋找一份訂單就像一個夢,說

public Order loadOrder(long orderid) { 
    return JPA.getManager().find(Order.class, orderid); 
} 

回報什麼是適當的。

當我試圖通過(uniqueid,revision)從我的JPA框架中檢索訂單時,問題就出現了。這失敗了:

public Order loadOrder(String uniqueid, int version) { 
    Query q = JPA.getManager().createQuery("SELECT o FROM Order o WHERE o.uniqueid=:uniqueid AND o.version=:version"); 
    q.setParameter("uniqueid", uniqueid).setParameter("version", version); 
    ... 
} 

with java.sql.SQLException:從字符串轉換爲uniqueidentifier時轉換失敗。 谷歌搜索SQLException消息會產生大量結果,但全部必須與生成唯一標識符。我沒有產生任何東西 - 只是想查找現有的值。

我有一種嘮叨的感覺,我失去了一些明顯的東西,但我必須承認,我卡住了。任何幫助?

BTW JPA.getManager()返回javax.persistence.EntityManager的一個實例。

回答