`

关于Column '*' not found 解决方案 Hibernate使用SQL查询返回实体类型,即返回某个类,或实体类

阅读更多
  1. sql为select a.*, b.id as childId, b.childName from a,b where a.id = b.id  

 当遇到Column '*' not found找不到的时候,首先检查该字段是否存在,如果存在还有这个错误,有两种解决办法

第一种:有可能是你的*字段取了别名,那么在查询的时候一定要指定改别名的类型,为已经存在的别名指定数据类型。只需要为最外层的有别名的字段指定类型即可。代码如下:

  1. SQLQuery query = session.createSQLQuery(sql).addScalar("别名", Hibernate.INTEGER);//指定别名的数据类型//多个别名可以连续写多个如:session.createSQLQuery(sql).addScalar("别名", Hibernate.INTEGER).addScalar("别名1",Hibernate.INTEGER);  

 第二种:将返回结果映射到具体的类。可以是实体类,也可以是普通的pojo类。查询代码如下:

 

  1. Query query = session.createSQLQuery(sql.toString()).setResultTransformer(Transformers.aliasToBean(CheckInfo.class));//CheckInfo为pojo类  
  1. SQLQuery sqluery = session.createSQLQuery(sql).addEntity(User.class);//User为实体类,对应数据库的某个表  

 如果存在返回多个实体的情况:

  1. session.createSQLQuery("SELECT {user.*}, {role.*}  FROM user u, role r WHERE u.roleId= r.id")   .addEntity("user", User.class)   .addEntity("role", Role.class)    {user.*}的user就是 addEntity("user", User.class)里面的user名称。   

摘自:http://blog.csdn.net/huozhicheng/article/details/6320138

分享到:
评论

相关推荐

    Native SQL查询 (使用SQLQuery).doc

    在查询时,如果实体在映射时有一个 many-to-one 的关联指向另外一个实体,必须也返回那个实体,否则会导致发生一个"column not found"的数据库错误。这些附加的字段可以使用*标注来自动返回,但我们希望还是明确指明...

    hibernate_annotations(中文API,高清)

    例如,可以通过指定@Formula来使用原生SQL查询来覆盖某些特定的计算字段,或者使用@NotFound(action=NotFoundAction.IGNORE)来优化外键关联的性能问题。 9. **元数据提取**:Hibernate可以自动从注解中提取元数据,...

    hibernate关联映射的作用和常用属性解释

    - **`not-found`**:当未找到关联实体时的行为,默认为`exception`。 - **`cascade`**:级联选项,例如`save-update`、`delete`等。 - **`inverse`**:指定该关联是否为可逆的,默认为`false`。 - **`fetch`**:加载...

    Java常见异常

    检查实体类中的属性名和数据库中的列名是否匹配,包括大小写和下划线的使用。 9. **IOException while loading persisted sessions: java.io.EOFException** 在加载持久化会话时遇到输入/输出异常,可能是文件损坏...

    hibernate一对多例子

    为了将Java实体类映射到数据库表,我们需要编写Hibernate映射文件。 #### Student映射文件(Student.hbm.xml) ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ...

    myeclipse反向生成jpa

    5. **生成实体类**:完成上述配置后,MyEclipse会根据数据库表结构自动生成对应的Java实体类,并添加必要的JPA注解,如`@Entity`、`@Id`、`@Column`等,以实现对象与数据库表的映射。 6. **生成CRUD操作**:除了...

    JPA爬坑.pdf

    为了解决这个问题,我们需要检查User实体类,确保它包含`userEmail`字段,并且该字段已经使用了`@Column`注解进行标注。例如: ```java @Entity public class User { // ... @Column(name = "user_email") ...

Global site tag (gtag.js) - Google Analytics