Java 是否有任何方法可以仅使用其ID在不相关的**表**或**实体**上使用左连接?在标准生成器中

Java 是否有任何方法可以仅使用其ID在不相关的**表**或**实体**上使用左连接?在标准生成器中,java,hibernate,kotlin,criteria,Java,Hibernate,Kotlin,Criteria,是否有任何方法可以在不相关的表或实体上仅使用其ID使用左联接?在标准生成器中 class A ( val id: UUID val message: String ) class B ( val id: UUID val a_id: UUID, val type: Boolean ) 是否有任何东西可以使用criteria builder像这样构建?或者有什么建议 从a中选择a,b在a.a_id=b.id上左连接b 以下是《Java持久化与Hibernate》一书中的

是否有任何方法可以在不相关的实体上仅使用其ID使用左联接?在标准生成器中

class A (
   val id: UUID
   val message: String
)

class B (
  val id: UUID
  val a_id: UUID,
  val type: Boolean
)
是否有任何东西可以使用criteria builder像这样构建?或者有什么建议

从a中选择a,b在a.a_id=b.id上左连接b


以下是《Java持久化与Hibernate》一书中的一段话:

JPA和Hibernate不支持没有映射 实体关联或集合


对于您的需求,您应该回到本机SQL。

您是指nativeQuery吗?是的。EntityManager.createNativeQuery()。您可能需要检查ResultTransformer接口和@SqlResultsMapping注释。我确信在互联网上有关于使用JPA的本地查询的教程。我明白了。你曾经遇到过这种错误吗?org.springframework.orm.jpa.JpaSystemException:JDBC类型没有方言映射:2002;我使用这种方法,然后在本机查询entityManager.createNativeQuery(native,Tuple::class.java)中查询多个对象或实体。我从未遇到过这种异常,但指定的方言似乎有问题。您在persistence.xml中指定了哪种SQL方言?或者,在spring的情况下,如何指定方言?对象模型中不应该有像
id
这样的代理键,但暂时不要介意。“左连接”是一个数据库概念,而不是一个面向对象的概念。在对象模型中这样做并不合适。您试图建模的实体术语中的关系是什么?瞧,现实世界的联系是什么?由于ID字段在域模型中没有任何意义,并且可以在不考虑域语义的情况下任意更改,因此仅基于ID关联事物可能存在缺陷。也就是说,如果ID与自然关键点和关系一致,您可以这样做。