我要表
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;
}
我该怎么做?
答案 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();