如果在ManyToOne映射中不存在,则如何加载id,但不加载对象

时间:2011-12-20 12:00:23

标签: java jpa

我有两个对象Customer和Transaction。他们看起来像这样:

@Entity
class Transaction {
    @Id
    long id;        

    @Column("CUSTOMER_ID")
    long customerId;

    @ManyToOne
    @JoinColumn(name="CUSTOMER_ID", insertable=false, updatable=false, nullable=false)
    Customer customer
    ...
}

@Entity
class Customer {
    @ID
    long id;
    ...
}

问题是我们使用假的客户编号来识别某些类型的交易。这是一种遗留的做法,我无法改变,我控制之外的其他各种过程都依赖它。

我希望能够做的是获取虚拟客户交易的客户编号,并在我的交易对象上只有一个空客户。对于不是虚拟客户的交易,我希望设置客户对象。理想情况下,我宁愿不必测试虚拟客户编号并发出单独的查询。

如何编写查询并映射我的对象来执行此操作?现在我尝试的一切,我最终得到虚拟政策ID的EntityNotFound异常。

2 个答案:

答案 0 :(得分:0)

使用UNION,您可以选择正确的客户记录,与默认的“NO SUCH CUSTOMER”记录联合,通过适当排序并仅获取第一个结果,确保默认值为秒。

答案 1 :(得分:0)

在JPA中,如果ManyToOne没有引用任何内容,那么你应该得到null。不确定你是如何获得EntityNotFound的。这可能是您的JPA提供商的特定问题。