2010-09-02 55 views
0

这是我真的很想做的事情 - 根据id值解析名称而不需要获取整个子模型。JPA从子表中检索名称值而不使用儿童模型

这里是什么,我有一个例子,一个表说,员工和Name_Details表 员工可能看起来像这样

Create Table Employee { 
    emp_idinteger not null generated by default as identity; -- generated pk 
    Department varchar(44); 
    emp_name_id Integer; -- fk to Name_Details table 
    ...other details such as hire_date etc.. 
} 

现在EMP_ID是一个外键name_details表可能看起来像这样: -

Create Table Name_Details { 
    id Integer; 
    Name varchar(32); 
    Address Varchar(127); 
    Postcode Varchar(10); 
    --other details.. 
} 

我的问题是,我想第一个Employee表使用Java类模型,但我没有兴趣设立Employee类和Name_Details表之间有一个一对一的关系取出整个N ame_details表(作为它的相当大)我想从第二个类中得到的唯一信息就是名称字段(通过将name_Details.id列加入emp_name_id列来找到)。 那么JPA有可能在我的Employee类中声明类似于瞬态变量的东西,称为say String employeeName,并根据上述relationShip通过JPA检索此类变量? 这是我有一个简单的例子,它有几个带有名称 - 值对的表,并且主表具有值。我需要这个阅读,而不是更新/删除等 我不是在WPS 6.1中使用JPA 1.x版与EJB3(而不是休眠)

THX摹

+0

我不知道是否有任何其他可能比一对一的关系...但也许@NamedNativeQuery将帮助... – cyphorious 2010-09-02 10:43:25

回答

1

有几个选项。

第一个是创建一个映射到Name_Details但仅映射名称和ID字段的Name类。然后,员工将有一个名为OneToOne,并且只有该名称才会被读取。

第二个选项是将Name_Details定义为Employee中的@SecondaryTable,并仅映射其名称。 JPA规范限制了辅助表连接必须共享相同的ID,但根据您使用的是哪种JPA提供程序,使用1-1外键是可能的(EclipseLink确实支持这一点)。您还可以定义一个视图,进行连接并映射到视图。

第三种解决方案是仍然映射所有的Name_Details字段,但将它们定义为LAZY。如果您的JPA提供程序支持LAZY基础(或提取组),则这些将不会被提取,除非被访问。