volking 2010-06-06 10:46
浏览 196
已采纳

hibernate3问题:我给一个实体类加入一个方法 getEmail,执行查询就会报错 invalid identif

一张表 user (name,password)
有一个实体类,就是上表的映射类,用的是注释,不是hbm.xml
执行HQL “from User u where u.name=?”;
本来执行时没有问题的。

后来我在实体类上加了2个方法 getEmail,setEmail(String email)
这下执行那个HQL就报错了,因为hibernate3自动写成select user,password, email from user....
但是我的表没有email这个字段。

只要我在实体类加入任何get方法,例如getEmail,查询的时候自动把email加到select 语句里

我感觉hibernate3这么做有点画蛇添足了,我都没有给getEmail加上@Column。

又发现一个问题, 只写getEmail,还必须要些setEmail,否则spring启动出错,没找到setter方法。

  • 写回答

1条回答 默认 最新

  • myali88 2010-06-08 21:29
    关注

    [code="java"]
    from User u where u.name=?
    [/code]
    这句HQL实际上和下面的一样:
    [code="java"]
    select u from User u where u.name=?
    [/code]
    即包含了User的所有属性。另外,你使用了Annotation方式的映射,而默认情况下所有的get方法都会被映射为相应的字段,见Hibernate参考文档:
    [quote]
    Every non static non transient property (field or method depending on the access type) of an entity is considered persistent, unless you annotate it as @Transient.
    [/quote]
    所以会生成“select user,password, email from user.”这样的sql,而你数据库没有“email”字段,自然出错。
    [quote]
    又发现一个问题, 只写getEmail,还必须要些setEmail,否则spring启动出错,没找到setter方法。
    [/quote]
    实体类并不是由spring托管的,而是由Session管理的。如果你要用spring注入email,那么自然是要set方法的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况