My Entity Model Class are
------- A -----------
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "NameA")
private String nameA;
public B getBid() {
return b;
}
public void setBid(B bid) {
this.b = bid;
}
public String getNameA() {
return nameA;
}
public void setNameA(String nameA) {
this.nameA = nameA;
}
@JoinColumn(name = "BID", referencedColumnName = "ID")
@ManyToOne(fetch= FetchType.LAZY)
private B b;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
--------------------------------------------
------------------ B -----------------------
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "NameB")
private String nameB;
public String getNameB() {
return nameB;
}
public void setNameB(String nameB) {
this.nameB = nameB;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
and
I want to
make this Query session.createQuery("select a.b from A a").list();
with Criteria API ????
Since you don’t have the inverse relationship, and since Criteria doesn’t allow selecting another entity than the root entity, you’ll have to use a subquery, but it’s ugly:
If you had the inverse OneToMany relationship from B to A, you would just have to do
BTW, these non-dynamically constructed queries are better expressed with HQL than with the criteria API. If your real query is the one you asked, just use HQL: it’s more readable and more powerful.