Java 读取实体a时从实体B读取值(非PK列上的左连接)-JPA 2.0

Java 读取实体a时从实体B读取值(非PK列上的左连接)-JPA 2.0,java,jakarta-ee,jpa,jpa-2.0,java-ee-6,Java,Jakarta Ee,Jpa,Jpa 2.0,Java Ee 6,因此,我: @Entity public class Entity { @EmbeddedId private MyId id; // not a part of Entity but a part of OtherEntity private String lookedUpValue; } public class MyId { private String firstField; private String secondField; } 表如下所示:

因此,我:

@Entity
public class Entity {

  @EmbeddedId
  private MyId id;

  // not a part of Entity but a part of OtherEntity
  private String lookedUpValue;

}

public class MyId {
   private String firstField;
   private String secondField;
}
表如下所示:

ENTITY
  FIRSTFIELD (PK)
  SECONDFIELD (PK)
  // etc.

public class OtherEntity {
  private String firstField;
  private String value;
}
OTHERENTITY
  VALUE (PK)
  FIRSTFIELD 
  //etc.
}
表如下所示:

ENTITY
  FIRSTFIELD (PK)
  SECONDFIELD (PK)
  // etc.

public class OtherEntity {
  private String firstField;
  private String value;
}
OTHERENTITY
  VALUE (PK)
  FIRSTFIELD 
  //etc.
}
当我读取实体时,我希望有一个左连接来填充其lookedUpValue字段,其中
Entity.id.firstField=OtherEntity.firstField
,即在SQL中它应该是:

Select ENTITY.FIRSTFIELD, ENTITY.SECONDFIELD, OTHERENTITY.VALUE 
from ENTITY
left join OTHERENTITY
ON ENTITY.FIRSTFIELD = OTHERENTITY.FIRSTFIELD
所以实体实例将填充所有这些字段

这是可能的,还是您推荐另一种方法?将OtherEntity作为每个实体上的一个字段来读取也可以,但是因为MyId没有映射到OtherEntity,所以我不知道如何实现这一点。非常感谢。

您可能想在这里使用


基本上,您可以使用所需的所有字段创建一个DTO,并在查询中使用它的构造函数(使用
NEW
)。

一种使用JoinColumn注释引用实体中其他实体的方法,下面的代码将位于实体中

@OneToOne(optional="true")
@JoinColumn(name="FIRSTFIELD",referencedColumnName="FIRSTFIELD")
OtherEntity otherEntity;