JPA @JoinColumn自定义对象类型



我正在研究一个使用 JPA 的项目,我很陌生。我遇到了一个我不太理解的逻辑。我有一个名为 A 的实体,其中包含以下字段/列:

@Column(name = "COD_UOP_COO")
    private String codUopCoo;

那么我在同一实体中有:

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "COD_UOP_COO", referencedColumnName = "COD_UOP")
    @BatchFetch(value = BatchFetchType.JOIN)
    private B b;

据我了解,这意味着b字段是通过在注释中指定的字段上AB连接表来检索JoinColumn,对吧?但是在这种情况下,联接是如何工作的呢?JPA 是否检索连接子句右侧的实体?
然后我有这个命名查询:

"select a from A a where (a.b.bfield = :parameter)"

这是什么意思?他们为什么要检查实体B字段的相等性?在我的表中A我没有任何带有B的外键列。并且b字段不是表 A 中的列。那么我要检查的是A的哪个列值呢?我缺少与数据库结构的链接。

JPQL 查询被转换为 SQL 查询。

此查询返回 A 对象,其中 A.COD_UOP_COO = B.COD_UOP 和 B.bfield = 参数。更改 b 类中元素的数据库列名称的 bfield。

您可以看到 native 查询将此参数添加到持久性.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>

最新更新