我有两个对象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异常。
答案 0 :(得分:0)
使用UNION,您可以选择正确的客户记录,与默认的“NO SUCH CUSTOMER”记录联合,通过适当排序并仅获取第一个结果,确保默认值为秒。
答案 1 :(得分:0)
在JPA中,如果ManyToOne没有引用任何内容,那么你应该得到null。不确定你是如何获得EntityNotFound的。这可能是您的JPA提供商的特定问题。