Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠';s Transformers.aliasToBean()方法_Java_Hibernate - Fatal编程技术网

Java 冬眠';s Transformers.aliasToBean()方法

Java 冬眠';s Transformers.aliasToBean()方法,java,hibernate,Java,Hibernate,在User.class内部 物业员工是否需要大写字母 Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( "select proj_employee.employee_no as employeeNo, ... .setResultTransformer(Transformers.aliasToBean(User.class

在User.class内部 物业员工是否需要大写字母

 Query query =  getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
                 "select proj_employee.employee_no as employeeNo, ...
 .setResultTransformer(Transformers.aliasToBean(User.class));

如果我把
EMPLOYEENO
改成小写字母,它就不起作用了。有人能解释一下为什么变量名必须全是大写字母吗?

请参阅博文:

SQL转换器 本机sql返回非实体 bean或Map通常更有用 而不是基本的
对象[]
。具有 结果就是现在 可能

private String EMPLOYEENO; 
//get/set for EMPLOYEENO
提示:调用了
addScalar()
HSQLDB上需要使其匹配 属性名,因为它返回列 所有大写名称(例如。 “学生姓名”)。这也可能是 解决了一个自定义的变压器 搜索属性名,而不是 使用精确匹配-也许我们应该 提供
fuzzyAliasToBean()
方法 ;)


可能您面临的情况与技巧中描述的情况相同,在这种情况下,您应该尝试添加对
addScalar()

的调用,考虑将列别名放在双引号中。 Oracle不使用双引号中指定的大写别名

List resultWithAliasedBean = s.createSQLQuery(
  "SELECT st.name as studentName, co.description as courseDescription " +
  "FROM Enrolment e " +
  "INNER JOIN Student st on e.studentId=st.studentId " +
  "INNER JOIN Course co on e.courseCode=co.courseCode")
  .addScalar("studentName")
  .addScalar("courseDescription")
  .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))
  .list();

StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0);

)

只是一种预感,但你的后端数据库管理系统是什么?@Stefan oracle。但我不认为它与后端数据库相关,我认为只有Oracle强制使用所有caps表名。我不确定这是否导致了您所看到的问题,或者是否是跨dbms的问题。@Stefan这与是否是特定于oracle无关。如果您希望您的代码是可移植的,请使用
addScalar
。当然可以,但如果这是问题所在,那么Oracle黑客攻击的结果就是可移植性。这也不是第一次了。列名限制为30个字符是使用ORMs时另一个Oracle“gotchya”的主要示例。它是否为所有DBMS返回全大写的列名,还是仅为Oracle?@Stefan我认为不是所有DBMS,而是Oracle(如上所述,HSQLDB也这样做)。因此,最后,如果要保证可移植性,最好的做法是使用
addScalar
Query query =  getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
                 "select proj_employee.employee_no \"employeeNo\", ...
 .setResultTransformer(Transformers.aliasToBean(User.class))