java JPA从子表中检索namevalue,而不使用子表的模型
这是我真正希望能够做到的事情——基于id值解析名称,而无需获取整个子模型
这里有一个示例,一个表say Employee和一个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..
}
我的问题是,我想用Java类对第一个表Employee建模,但我不想在Employee类和Name_Details表之间建立一对一的关系,以获取整个Name_Details表(因为它非常大)。我只想从第二个类获得Name字段(通过将emp_name_id列与name_Details.id列连接起来找到。 那么,在JPA中是否可以说在我的Employee类中声明一个临时变量,称为say String employeeName,并让JPA根据上述关系检索它? 这是一个简化的示例,其中有几个表具有名称-值对,主表具有这些值。我需要这个阅读,而不是更新/删除等。 我没有使用JPA v1。在WPS 6.1上使用EJB3(而不是hibernate)的x
Thx G
# 1 楼答案
有几个选择
第一种方法是只创建一个映射到Name_细节的Name类,但只映射Name和id字段。然后,员工将有一个OneToOne来命名,并且只读取名称
第二个选项是将Name_Details定义为Employee中的@SecondaryTable,并仅映射其中的名称。JPA规范限制二级表联接必须共享相同的id,但根据您使用的JPA提供程序,可能会使用1-1外键(EclipseLink确实支持此功能)。您还可以定义一个视图来进行连接并映射到该视图
第三种解决方案是仍然映射所有Name_Details字段,但将它们定义为LAZY。如果您的JPA提供程序支持惰性基础(或获取组),则除非访问,否则这些将不会获取