有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    有几个选择

    第一种方法是只创建一个映射到Name_细节的Name类,但只映射Name和id字段。然后,员工将有一个OneToOne来命名,并且只读取名称

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

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