Hibernate JPA使用子实体获取父实体
我有以下实体类:代理和客户端。其中一个代理可以有多个客户端。(一对多) 我在应用程序中获取对客户端主键的引用。因此,我能够直接使用EntityManager的FindAPI找到客户机实体 但是在获取客户端之后,我需要访问父代理Hibernate JPA使用子实体获取父实体,hibernate,jpa,Hibernate,Jpa,我有以下实体类:代理和客户端。其中一个代理可以有多个客户端。(一对多) 我在应用程序中获取对客户端主键的引用。因此,我能够直接使用EntityManager的FindAPI找到客户机实体 但是在获取客户端之后,我需要访问父代理 AgentEntity parentAgent = null; ClientEntity clientEntity = null; clientEntity = entityManager.find(ClientEntity.class, "20
AgentEntity parentAgent = null;
ClientEntity clientEntity = null;
clientEntity = entityManager.find(ClientEntity.class, "2001");
// Parent Agent is null as well as don't know the Agent Id by anyway
parentAgent = clientEntity.getAgent();
现在,如果我将FetchType.EAGER放在这里,那么只有我得到对parentAgent的引用,否则就没有了。我不想使用即时抓取。由于我已经创建了一种双向关系,所以我也没有得到代理Id的值,所以我可以使用EntityManager的FindAPI进行查找。在这种情况下,我必须使用条件查询
如果我有对其子实体的引用,请建议如何加载父实体。您使用的是即时抓取,这是toOne关联的默认设置。但是,即使不是这样,只要调用parentAgent上的方法,父实体也会被延迟加载。那么,到底是什么问题呢?我同意,这意味着无论何时调用clientEntity.getAgent(),都应该加载它。但它不是这样工作的。我得到了空代理。这意味着你正在加载的客户端2001没有任何关联的代理。非常感谢。在测试用例中,这是一个愚蠢的错误。您正在使用急切抓取,这是toOne关联的默认设置。但是,即使不是这样,只要调用parentAgent上的方法,父实体也会被延迟加载。那么,到底是什么问题呢?我同意,这意味着无论何时调用clientEntity.getAgent(),都应该加载它。但它不是这样工作的。我得到了空代理。这意味着你正在加载的客户端2001没有任何关联的代理。非常感谢。这是测试用例中的愚蠢错误。
@Entity
@Table(name="MST_CLIENT")
public class ClientEntity
{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
@Column(name="FIRST_NAME")
private String firstName;
@ManyToOne
private AgentEntity agent;
public AgentEntity getAgent()
{
return agent;
}
public void setAgent(AgentEntity agent)
{
this.agent = agent;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
}//Client Entity
AgentEntity parentAgent = null;
ClientEntity clientEntity = null;
clientEntity = entityManager.find(ClientEntity.class, "2001");
// Parent Agent is null as well as don't know the Agent Id by anyway
parentAgent = clientEntity.getAgent();