gpt4 book ai didi

java - JPA 实体映射到可选的 SecondaryTable

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:05 25 4
gpt4 key购买 nike

我有一个实体。我想有选择地从辅助表加载有关实体的其他信息。我有以下映射。

@Entity
@Table( name = "program", schema = "myschema" )
@SecondaryTable( name = "program_info", schema = "myschema", pkJoinColumns =
@PrimaryKeyJoinColumn( name = "program_id", referencedColumnName = "program_id" ) )
public class Program { ... }

我已正确映射所有列,并且单元测试有效。当程序表中有一行在 program_info 表中没有对应行时,问题就来了。在那种情况下,它根本不会加载程序。我需要能够将整个辅助表标记为可选。我宁愿不必创建另一个实体/dao/服务并进行 1-1 映射。

我正在使用 eclipselink,但如果可以的话,我想远离供应商的具体细节。

最佳答案

I need to be able to mark the entire secondary table as optional.

EclipseLink 将对 SecondaryTable 执行 INNER JOIN,因此如果辅助表中没有相应的行,您将一无所获。换句话说,EL 期望在辅助表中找到一行(在创建、读取、更新、删除时)。

如果您想要的是 OUTER JOIN,您应该使用可选的 OneToOne 关联(在您的情况下可能使用共享主键)。

另一种方法是使用数据库 View (执行 OUTER JOIN)并映射 View 。

I would prefer to stay away from having to create another entity/dao/service and do a 1-1 mapping.

我不明白为什么拥有可选的 OneToOne 会强制您拥有相应的 DAO 和服务。通过主要的“holder”部分管理可选部分。

另见

关于java - JPA 实体映射到可选的 SecondaryTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147061/

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