Entity framework JPA带多通的还原方法不返回相关数据

Entity framework JPA带多通的还原方法不返回相关数据,entity-framework,jpa,spring-data-jpa,eclipselink,many-to-one,Entity Framework,Jpa,Spring Data Jpa,Eclipselink,Many To One,我有两个实体使用一对一和多对一关系: @Entity @Table(name = TableName.PERSON) public class Person { @Id @Column(name = FieldName.DB_KEY) public String dbKey; @Column(name = FieldName.ENTITY_ID) public String entityId; @Column(name = FieldName.SORT_KEY) public String

我有两个实体使用一对一和多对一关系:

@Entity
@Table(name = TableName.PERSON)
public class Person {

@Id
@Column(name = FieldName.DB_KEY)
public String dbKey;

@Column(name = FieldName.ENTITY_ID)
public String entityId;

@Column(name = FieldName.SORT_KEY)
public String sortKey;

@JoinColumn(name = FieldName.ENTITY_ID, referencedColumnName = 
FieldName.ENTITY_ID, insertable = false, updatable = false)
@ManyToOne(fetch = FetchType.EAGER)
@JoinFetch(value = JoinFetchType.INNER)
public WLEntity entity;

}

@Entity
@Table(name = TableName.WL_ENTITY)
public class WLEntity {

@Id
@Column(name = FieldName.ENTITY_ID)
public String entityId;

@Column(name = FieldName.HAS_ADDRESS)
public boolean hasAddress;

@OneToMany(mappedBy = "entity", targetEntity = PersonIndex.class, cascade = CascadeType.ALL)
public List<Person> persons;
}
因此,正确执行了我想要的联接,但在返回的数据中,实体字段仍然为空,但所有其他字段都已填充:

List<Person> persons = personRepository.findBySortKeyStartingWith("Sort");
Person person = persons.get(0);
List persons=personRepository.findBySortKeyStartingWith(“排序”);
Person=persons.get(0);
person.entity==null,但person.entityId已正确填写

那么我要做什么,让person.entity填满


我将spring boot与eclipselink jpa 2.6.4一起使用,切换映射,使entityId基本映射中的insertable=false、updateable=false代替JoinColumn。如果这解决了问题,那是因为这使映射成为只读的,因此没有在共享缓存中设置关系。另一种选择是使用em.refresh或使用特定于EclipseLink的刷新查询提示强制刷新。感谢您的回答,但是如果我在实体id映射上添加insertable=false、updateable=false,我将无法再写入实体id。我还在查询中尝试了@QueryHints({@QueryHint(name=“org.eclipse.persistence.config.CacheUsage”,value=CacheUsage.DoNotCheckCache)}),另外在我的JPA图中设置PersistenceUnitProperties.CACHE\u SHARED\u DEFAULT=“false”,但这也不起作用。如果您无法写入数据库中的entity\u id字段,那你就不是在设定关系。如果不设置它,它将以空值保留在缓存中,直到刷新对象。虽然您可以刷新它,但您正在使用的任何设置都不能做到这一点(它们影响共享缓存的使用,而不是一级缓存中的托管实体实例),而且刷新的成本很高-既然您可以自己设置引用,为什么还要麻烦呢?非常感谢您的解释和帮助。现在它起作用了。我更改了insertable=false,updateable=false,就像您在第一条评论中建议的那样,还更改了insert逻辑。现在,我不是为每个表本身插入,而是在调用存储库时为实体和人员一起插入。之后,查询开始工作。
SELECT t1.DB_KEY, t1.ENTITY_ID, t1.SORT_KEY, t0.ENTITY_ID, t0.HAS_ADDRESS FROM WL_ENTITY t0, PERSON t1 WHERE (t1.SORT_KEY LIKE ? AND (t0.ENTITY_ID = t1.ENTITY_ID))
List<Person> persons = personRepository.findBySortKeyStartingWith("Sort");
Person person = persons.get(0);