gpt4 book ai didi

java - JPA 从子表中检索名称值而不使用子模型

转载 作者:行者123 更新时间:2023-12-01 16:01:59 24 4
gpt4 key购买 nike

这是我真正希望能够做到的事情 - 根据 id 值解析名称,而不获取整个子模型。

这是我所拥有的一个示例,一个名为 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 类中声明一个名为 String employeeName 的 transient 变量,并让 JPA 根据上述关系检索该变量?这是我所拥有的一个简化示例,其中有几个带有名称/值对的表,并且主表具有值。我需要这个来阅读而不是更新/删除等。我没有在 WPS 6.1 上将 JPA v1.x 与 EJB3(而不是 hibernate )一起使用

谢谢G

最佳答案

有几个选项。

第一种方法是创建一个映射到 Name_Details 的 Name 类,但仅映射 name 和 id 字段。然后,员工将有一个 OneToOne to Name,并且只有名字会被读取。

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

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

关于java - JPA 从子表中检索名称值而不使用子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com