Java 从JPA查找guid

Java 从JPA查找guid,java,sql-server,jpa,Java,Sql Server,Jpa,本来应该是无名小卒的事情比我想象的要复杂一些,所以我希望有人能帮上忙 基本上,我在SQL Server中有一个经典的order数据库表,如: CREATE TABLE [dbo].[order] ( [orderid] [bigint] NOT NULL, [uniqueid] [uniqueidentifier] NOT NULL, [revision] [int] NOT NULL, <lots of other stuff...> CONST

本来应该是无名小卒的事情比我想象的要复杂一些,所以我希望有人能帮上忙

基本上,我在SQL Server中有一个经典的order数据库表,如:

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])
)
返回任何适当的值

当我试图从JPA框架访问orders表时,问题就出现了。这是orders表的实体映射:

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

  private String uniqueid;

  private int revision;

  <lots of other stuff...>
}
返回任何适当的值

当我试图从我的JPA框架中检索orderby(uniqueid,revision)时,问题就出现了。这一点失败得很惨:

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);
    ...
}
使用java.sql.SQLException:从字符串转换为uniqueidentifier时,转换失败。 搜索SQLException消息会产生大量结果,但都与生成唯一标识符有关。我没有生成任何东西-只是尝试查找现有的值

我有一种唠叨的感觉,我错过了一些明显的东西,但我必须承认我被卡住了。有什么帮助吗


顺便说一句,JPA.getManager()返回javax.persistence.EntityManager的实例。

我不熟悉SQL Server中的uniqueidentifier类型,而且JPA似乎也不熟悉

您可以尝试改用varchar类型

JDBC驱动程序是否支持uniqueidentifier,如果支持,它希望如何绑定类型?您可能需要进行一些转换

如果您使用的是EclipseLink,则可以使用转换器

public Order loadOrder(long orderid) {
    return JPA.getManager().find(Order.class, orderid);
}
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);
    ...
}