JPA:根据某些条件加入一列

时间:2013-11-20 17:15:24

标签: java java-ee jpa eclipselink

我要表

table A : personID, name, someOtherColumns (personID is primarykey)
table B:  personAliasID, personID, personAias, someOtherColumns (personAliasID is primary key)
一个人可以有多人阿里亚斯。我想要做的是获得一个表基于personID和某个人的实体。实体A还应该有一个实例字段B b(如下所示的代码),以便我可以为实体B访问此人的信息。

这是我的代码

   @Entity
    @Table(name="A")
    public class A implement Serializable {
        ...
        ...
       //find the column in B where personAlias="someName"       
       @PrimaryKeyJoinColumn(name="personID", referencedColumnName = "personID"
          private B b;

    }

我该怎么做?

1 个答案:

答案 0 :(得分:0)

要表示您正在寻找的联接,您可以执行以下操作:

...
public class A implements Serializable
    @Id
    @GeneratedValue(strategy = ...) // assuming you are generating values for personId
    private long personId;
...

...
public class B implements Serializable
...
    @JoinColumn(name="personId", nullable=false)
    @ManyToOne
    private A person;

然后在代码中创建这样的对象,你可以这样做:

A a = ... // create person object for person with appropriate personID
B b = ...
b.setPerson(a);
b.setPersonAlias(alias);

但是,只需根据这些表进行查询,您也可以在@NamedQuery上创建A来执行所需的查询。 以下是如何为A获取变量personID的实体personAlias

e.g。

...
@NamedQuery(name = "A.personByAlias", query = "select a from A a, B b"
            + " where a.personId = b.personId and b.personAlias = :personAlias")
public class A implements Serializable
...

然后致电:

    Query query = em.createNamedQuery("A.personByAlias");
    query.setParameter("personAlias", id);
    List<A> result = query.getResultList();