休眠查询。演员 类
Hibernate query. Cast classes
有hql查询
List<Developer> developers = session.createQuery("from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = " + project.getId()).getResultList();
它可以工作并获取对象列表,但不是开发人员。
实际上,带有i get 的对象看起来像一个数组列表,其中包括对象数组,其中包括开发人员class 对象和ProjectDeveloper (mtm class)。不幸的是,我无法在图像中放置 link,但架构看起来像:
developers = {ArrayList@4889} size = 4
\/ 0 = {object[2]4897} //what does this do in ArrayList<**Developer**>>??
-> 0 = {Developer@4901} //This is exactly the class I expect in ArrayList
-> 1 = {ProjectDeveloper}//?????
-> 1 = {object[2]4898}
开发者class:
@Table(name = "developers")
@Entity
public class Developer implements GenerallyTable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "first_name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "sex")
private boolean sex;
@Column(name = "salary")
private BigDecimal salary;
//...getters + setters
}
这怎么不可能(Developer.class 如何转换为具有未知结构的数组),以及如何准确获取 Developers 的 ArrayList?
尝试使用 createQuery
定义的类型 https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Session.html#createQuery-java.lang.String-java.lang.Class-
List<Developer> developers = session.createQuery("select d from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = " + project.getId(), Developer.class)
.getResultList();
你还应该使用 setParameter
方法
List<Developer> developers = session.createQuery("select d from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = :proj_id", Developer.class)
.setParameter("proj_id", project.getId())
.getResultList();
有hql查询
List<Developer> developers = session.createQuery("from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = " + project.getId()).getResultList();
它可以工作并获取对象列表,但不是开发人员。
实际上,带有i get 的对象看起来像一个数组列表,其中包括对象数组,其中包括开发人员class 对象和ProjectDeveloper (mtm class)。不幸的是,我无法在图像中放置 link,但架构看起来像:
developers = {ArrayList@4889} size = 4
\/ 0 = {object[2]4897} //what does this do in ArrayList<**Developer**>>??
-> 0 = {Developer@4901} //This is exactly the class I expect in ArrayList
-> 1 = {ProjectDeveloper}//?????
-> 1 = {object[2]4898}
开发者class:
@Table(name = "developers")
@Entity
public class Developer implements GenerallyTable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "first_name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "sex")
private boolean sex;
@Column(name = "salary")
private BigDecimal salary;
//...getters + setters
}
这怎么不可能(Developer.class 如何转换为具有未知结构的数组),以及如何准确获取 Developers 的 ArrayList?
尝试使用 createQuery
定义的类型 https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Session.html#createQuery-java.lang.String-java.lang.Class-
List<Developer> developers = session.createQuery("select d from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = " + project.getId(), Developer.class)
.getResultList();
你还应该使用 setParameter
方法
List<Developer> developers = session.createQuery("select d from Developer d " +
"left join ProjectDeveloper pd on pd.developer.id = d.id " +
"where pd.project.id = :proj_id", Developer.class)
.setParameter("proj_id", project.getId())
.getResultList();