- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 ResultTransformer 仅从实体中选择特定属性,只是我不需要实体中的所有属性。但我面临的问题是当一个属性是“一对多”时。这是一个简单的例子。
@Entity
@Table(name = "STUDENT")
public class Student
{
private long studentId;
private String studentName;
private List<Phone> studentPhoneNumbers = new ArrayList<Phone>();
@Id
@GeneratedValue
@Column(name = "STUDENT_ID")
public long getStudentId()
{
return this.studentId;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "STUDENT_PHONE", joinColumns = {@JoinColumn(name = "STUDENT_ID")}, inverseJoinColumns = {@JoinColumn(name = "PHONE_ID")})
public List<Phone> getStudentPhoneNumbers()
{
return this.studentPhoneNumbers;
}
@Column(name = "STUDENT_NAME", nullable = false, length = 100)
public String getStudentName()
{
return this.studentName;
}
这是 ResultTransformer 用于存储所选属性的类。
public class StudentDTO
{
private long m_studentId;
private List<Phone> m_studentPhoneNumbers = new ArrayList<Phone>();
..
constructors and getters and setters..
最后是标准代码
Criteria criteria = session.createCriteria(Student.class)
.setProjection(Projections.projectionList()
.add(Projections.property("studentId"), "m_studentId")
.add(Projections.property("studentPhoneNumbers"), "m_studentPhoneNumbers"))
.setResultTransformer(Transformers.aliasToBean(StudentDTO.class));
List list = criteria.list();
StudentDTO p = (StudentDTO) list.get(0);
因此,在我获得 StudentDTO 对象后,只有 studenId 可用,studentPhoneNumber 为 null ..这是否意味着 ResultTransformer 不适用于任何关系?或者我的方式是错误的有什么建议吗?
谢谢
最佳答案
我以前遇到过这个问题。 hibernate 中的变形金刚通常会导致挫折。您可以按照建议进行手动分配,也可以使用 hibernate 将 DTO 类映射到同一个表。只需将与 Student 类相同的注释添加到 StudentDTO 类,然后像正常一样加载它。所以学生 DTO 将是:
@Entity
@Table(name = "STUDENT")
public class StudentDTO
{
private long studentId;
private String studentName;
private List<Phone> studentPhoneNumbers = new ArrayList<Phone>();
@Id
@GeneratedValue
@Column(name = "STUDENT_ID")
public long getStudentId()
{
return this.studentId;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "STUDENT_PHONE", joinColumns = {@JoinColumn(name = "STUDENT_ID")}, inverseJoinColumns = {@JoinColumn(name = "PHONE_ID")})
public List<Phone> getStudentPhoneNumbers()
{
return this.studentPhoneNumbers;
}
不要加载您不想加载的内容。
关于java - Hibernate 中的 ResultTransformer 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423948/
有没有人找到通过类似的机制(例如在Hibernate中指定ResultTransformer)进行查询结果转换的聪明方法? 我所能想到的就是在查询返回结果行之后对其进行转换。还有其他办法吗? 对于构造
我有一些非常复杂的 SQL(进行一些聚合,一些基于最大值的计数等)所以我想使用 SQLQuery 而不是 Query。我创建了一个非常简单的 Pojo: public class SqlCount {
我想知道在 JPA 规范中是否有等效的 ResultTransformer.DISTINCT_ROOT_ENTITY 可使用?现在,我正在尝试实现搜索功能,我必须为此使用 JPA 规范(我不允许使用
我有一个sql查询如下: List employees = getCurrentSession() .createSQLQuery(
我正在使用 ResultTransformer 仅从实体中选择特定属性,只是我不需要实体中的所有属性。但我面临的问题是当一个属性是“一对多”时。这是一个简单的例子。 @Entity @Table(na
我需要从Hibernate搜索结果中收集特定的DTO,我连接了maven中的所有依赖项,根据官方文档编写了以下请求(我删除了不必要的代码,这只会造成困惑,只留下搜索所需): public List s
我有以下 SpringData 存储库查询: @Query("SELECT new com.mypackage.MobileCaseList(c.ident, concat(c.subtype
当我使用 SetFirstResult 和 SetMaxResult 时,如果查询已连接,则结果具有重复结果而不是唯一结果。 然后我将所有类型的 Distinct 助手用于标准 api。但它不会过滤整
我是一名优秀的程序员,十分优秀!