仅在JPA TupleQuery中获取Id
难道不可能只从外部对象获取id吗 简单的例子:仅在JPA TupleQuery中获取Id,jpa,eclipselink,Jpa,Eclipselink,难道不可能只从外部对象获取id吗 简单的例子: class Person { int id; String name; @JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ID") @ManyToOne(fetch = FetchType.LAZY) Address addressesId } class Address { int id; String city; } CriteriaBui
class Person {
int id;
String name;
@JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ID")
@ManyToOne(fetch = FetchType.LAZY)
Address addressesId
}
class Address {
int id;
String city;
}
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = criteriaBuilder.createTupleQuery();
Root<Person> from = q.from(Person.class);
q.multiselect(from.get(Person_.name),
from.get(Person_.AdresseId);
TypedQuery<Tuple> query = em.createQuery(q);
List<Tuple> resultList = query.getResultList();
班级人员{
int-id;
字符串名;
@JoinColumn(name=“ADDRESS\u ID”,referencedColumnName=“ID”)
@manytone(fetch=FetchType.LAZY)
地址ID
}
班级地址{
int-id;
字符串城市;
}
CriteriaBuilder CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery q=criteriaBuilder.createTupleQuery();
Root-from=q.from(Person.class);
q、 多重选择(从.get(人名),
from.get(人/地址id);
TypedQuery=em.createQuery(q);
List resultList=query.getResultList();
我只需要Person表中当然存在的来自Address的ID,但是JPA会自动生成一个内部联接查询,并且省略了具有空地址的实体。联接是不必要的。有没有办法在这个TupleQuery中只从Address获取ID
XanasJPA只能使用提供的映射来返回数据,并且由于Person中的地址外键是使用对象引用映射映射的,因此在查询中包含它需要JPA中的联接。获取包含空值的唯一方法是使用左外联接,如Koitoer下面所述 不过,另一种方法是为Person实体内的addressId外键创建另一个只读基本映射
class Person {
int id;
String name;
@JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ID")
@ManyToOne(fetch = FetchType.LAZY)
Address address;
@Column(name ="ADDRESS_ID", insertable=false, updatable=false)
private Long addressId;
}
这将允许您在需要address对象实例时使用“address”属性,在查询中仅需要Foreign键值而不需要完整的address实体时使用“addressId”:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = criteriaBuilder.createTupleQuery();
Root<Person> from = q.from(Person.class);
q.multiselect(from.get(Person_.name),
from.get(Person_.AddressId);
TypedQuery<Tuple> query = em.createQuery(q);
List<Tuple> resultList = query.getResultList();
CriteriaBuilder-CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery q=criteriaBuilder.createTupleQuery();
Root-from=q.from(Person.class);
q、 多重选择(从.get(人名),
from.get(Person\u.AddressId);
TypedQuery=em.createQuery(q);
List resultList=query.getResultList();
将从Person表返回name和addressId值,而不使用任何联接。JPA只能使用提供的映射来返回数据,并且由于Person中的地址外键是使用对象引用映射映射映射的,因此在查询中包含它需要在JPA中进行联接。获取包含null的唯一方法是使用左外连接,如Koitoer下面所述 不过,另一种方法是为Person实体内的addressId外键创建另一个只读基本映射
class Person {
int id;
String name;
@JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ID")
@ManyToOne(fetch = FetchType.LAZY)
Address address;
@Column(name ="ADDRESS_ID", insertable=false, updatable=false)
private Long addressId;
}
这将允许您在需要address对象实例时使用“address”属性,在查询中仅需要Foreign键值而不需要完整的address实体时使用“addressId”:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = criteriaBuilder.createTupleQuery();
Root<Person> from = q.from(Person.class);
q.multiselect(from.get(Person_.name),
from.get(Person_.AddressId);
TypedQuery<Tuple> query = em.createQuery(q);
List<Tuple> resultList = query.getResultList();
CriteriaBuilder-CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery q=criteriaBuilder.createTupleQuery();
Root-from=q.from(Person.class);
q、 多重选择(从.get(人名),
from.get(Person\u.AddressId);
TypedQuery=em.createQuery(q);
List resultList=query.getResultList();
将从Person表返回name和addressId值,而不进行任何连接。谢谢,听起来不错,我尝试一下Tanks,听起来不错,我尝试一下