Hibernate JPA使用子实体获取父实体

Hibernate JPA使用子实体获取父实体,hibernate,jpa,Hibernate,Jpa,我有以下实体类:代理和客户端。其中一个代理可以有多个客户端。(一对多) 我在应用程序中获取对客户端主键的引用。因此,我能够直接使用EntityManager的FindAPI找到客户机实体 但是在获取客户端之后,我需要访问父代理 AgentEntity parentAgent = null; ClientEntity clientEntity = null; clientEntity = entityManager.find(ClientEntity.class, "20

我有以下实体类:代理和客户端。其中一个代理可以有多个客户端。(一对多)

我在应用程序中获取对客户端主键的引用。因此,我能够直接使用EntityManager的FindAPI找到客户机实体

但是在获取客户端之后,我需要访问父代理

    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();