I have two tables Student and Address. One student can have multiple address. Entities looks like this
@Entity @Table(name = "STUDENT")
public class Student {
@Column(name = "STUDENT_ID") Integer studentId;
@Column(name = "FIRST_NAME") String fName;
@Column(name = "LAST_NAME") String LName;
}
@Entity @Table(name = "ADDRESS")
public class Address {
@Column(name = "ADDRESS_ID") Integer addressId;
@Column(name = "STREET_NAME") String street_name;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "STUDENT_ID")
private Student student;
}
I need to use JPA Criteria to fetch all addresses based on a student fName and LName. It can be with INNER JOIN or even it can be sub-query for Address table.
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Address> criteriaQuery = builder.createQuery(Address.class);
Root<Address> fromAddress = criteriaQuery.from(Address.class);
//Can be a JOIN or Sub-Query.
em.createQuery(criteriaQuery).getResultList();
Requirement is to load only now Address table data.
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Address> criteriaQuery = builder.createQuery(Address.class);
Root<Address> fromAddress = criteriaQuery.from(Address.class);
//join
Join<Address, Student> studentJoin = fromAddress.join("student");
//where
criteriaQuery.where(builder.and(
builder.equal(studentJoin.get("fName"), fName),
builder.equal(studentJoin.get("lName"), lName)
));
//projection
criteriaQuery.select(fromAddress);
return em.createQuery(criteriaQuery).getResultList();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.