2011-11-17 159 views
0

我有两个实体CustomerAccountJPA原生查询(SQL视图)

@Entity 
@Table(name="customer") 
public class Customer 
{ 
    private Long id; 
    private String name; 
    private Long accountId; 
    private String accountType; 
    private String accountName; 

    ... 
} 

@Entity 
@Table(name="account") 
public class Account 
{ 
    private Long id; 
    private String accountName; 
    private String accountType; 
    ... 
} 

我有一个SQL查询:

select 
    a.id as account_id, 
    a.account_name, 
    a.account_type, 
    d.id, 
    d.name 
from account a, 
    customer d` 
where d.account_id = a.id 

假设在应用程序启动

  1. accountcustomer表在数据库中创建。
  2. accountTypeaccountName客户实体的字段不应该在数据库中创建。也就是说,客户数据库表中将只创建idname列。

问题

如何运行上面的SQL查询,并与accountTypeaccountName性填充了SQL查询的ACCOUNT_NAME和ACCOUNT_TYPE值返回Customer实体。

+0

你可以去休眠吗? – ssedano

+0

我真的不明白你的问题。这些“假设”是什么?这是你想如何工作的代码?你不想坚持Customer实体的'accountType'和'accountName'属性? ('@ Transient'?)你想让这些属性成为组合PK的一部分吗?客户和账户之间的关系是什么?你的SQL查询将返回这种形式的笛卡尔产品(这些实体之间没有关联)... –

+0

accountType和accountName不是复合Pk,我使用id作为主键。我已更新该帖子。就像你说的那样,Customer实体的accountType和accountName属性是@Transient。客户实体具有对账户实体的引用。我想从数据库中检索客户实体,该客户实体不包含帐户实体,但包含其在数据库中引用的帐户记录的帐户类型和帐户名称。如果您有更好的方式获得这两个属性,请分享它。谢谢 –

回答

0

这听起来像你真的想同时做两个不同的事情。从数据库中检索两个对象,这真的是一个选择是正确的?因此,当JPA完成选择时,您会希望实体拥有当前存储在数据库中的信息。

那么,为什么不只是做一个SELECT然后更新?

此外,有没有商业的原因有重复的信息?从设计的角度来看,客户是否有与之相关的账户对象而不是重复账户类型和账号?

+0

客户实体引用数据库中的帐户实体。我没有进行更新。我想从数据库中检索一个Customer Entity,该数据库不包含Account实体,但包含它在数据库中引用的Account记录的accountType和accountName。如果您有更好的方式获得这两个属性,请分享它。谢谢 –