我对标准查询有疑问。
在MySQL数据库中,有专栏人员,并且与专栏护照相连。在标准api的帮助下,我试图通过对象/实体护照的“国家”属性获取对象/实体人。
我正在使用的代码示例:
public List<Guest> getByPassportCountry(String country) {
try {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Guest> query = criteriaBuilder.createQuery(Guest.class);
Root<Guest> root = query.from(Guest.class);
Join<Guest, Passport> join = root.join(Guest_.PASSPORT).join(Passport_.COUNTRY);
query.select(root).where(criteriaBuilder.equal(join.get(Passport_.COUNTRY), country));
TypedQuery<Guest> result = entityManager.createQuery(query);
return result.getResultList();
} catch (NoResultException e) {
return null;
}
}
也存在此实体的连接:实体护照
@Entity
@Table(name = "passport_table")
public class Passport extends AEntity{
@Column(name = "passport_serial")
private String passportSerial;
@Column(name = "passport_number")
private Integer passportNumber;
@Column(name = "date_of_issue")
@Convert(converter = StringToDataSQLConverter.class)
private String dateOfIssue;
@Column(name = "date_of_expiry")
@Convert(converter = StringToDataSQLConverter.class)
private String dateOfExpiry;
@Column(name = "country")
private String country;
//One guest to one passport
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "guest_id", referencedColumnName = "id")
private Guest guest;
&实体访客
@Entity
@Table(name = "guest_table")
public class Guest extends AEntity {
@Column(name = "guest_first_name", length = 45)
private String guestFirstName;
@Column(name = "guest_last_name", length = 45)
private String guestLastName;
@Column(name = "guest_birthdate")
@Convert(converter = StringToDataSQLConverter.class)
private String guestBirthDate;
//Many guests to one room
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "room_id", referencedColumnName = "id")
private Room room;
//One passport to one guest
@OneToOne(mappedBy = "guest")
private Passport passport;
我做错了什么???请帮忙!!!
我做到了
public List<Guest> getByPassportCountry(String country) {
try {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Guest> query = criteriaBuilder.createQuery(Guest.class);
Root<Guest> root = query.from(Guest.class);
Join<Guest, Passport> passport = root.join(Guest_.passport);
query.select(root).where(criteriaBuilder.equal(passport.get(Passport_.COUNTRY),country));
TypedQuery<Guest> result = entityManager.createQuery(query);
return result.getResultList();
} catch (NoResultException e) {
return null;
}
}