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;