【问题标题】:Looking up GUIDs from JPA从 JPA 查找 GUID
【发布时间】:2012-12-13 13:05:04
【问题描述】:

本来应该是无脑的事情结果比我想象的要复杂一些,所以我希望有人能提供帮助。

基本上我在 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, revision) 从 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);
}

返回合适的值。

当我尝试从我的 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);
    ...
}

带有 java.sql.SQLException:从字符串转换为唯一标识符时转换失败。 谷歌搜索 SQLException 消息会产生大量结果,但都与生成唯一标识符有关。我没有生成任何东西 - 只是试图查找现有值。

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

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

【问题讨论】:

    标签: java sql-server jpa


    【解决方案1】:

    我对 SQL Server 中的 uniqueidentifier 类型不熟悉,JPA 好像也不熟悉。

    您可以尝试使用 varchar 类型。

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

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

    http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm#CHDEHJEB

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 2013-06-15
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多