我用@注解配置实体类映射  
不知道是不是表没有主键的原因,我查出来的数据都是第一条,比如我查到30条数据,但是30条都是第一条的 数据。
请问@注解配置实体类映射 要怎么配置  
我的实体类是
@Entity   
3.@Table(name = “tb_cat”)   
4.public class Cat{  
  @GenericGenerator(name = "generator", strategy = "increment")   
  @Id //我没有id 但是去掉就会报错
  @GeneratedValue(generator = "generator")   
7. private String date;   
8. @Column(name = “name”)   
9. private String name;   
11. @Column(name = “createDate”)   
12. private int number;   
13. //….getter、setter方法省略   
14.}   我测试了一下,如果我再数据库中加主键就能正确获取到数据也就是说
@GenericGenerator(name = "generator", strategy = "increment")   
  @Id //我没有id 但是去掉就会报错
  @GeneratedValue(generator = "generator")
这一部分代码错了,我查了api也不知道,往上也搜索不到
,还有无满意结贴输入什么密码啊,这么多打酱油的

解决方案 »

  1.   

    亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象 解决办法就是:将所有的列做为复合主键,记得要序列化哦。
      

  2.   

    如果没人能回答出提问,我csdn积分要来何用(回答出问题者给全分,也可以追加分)
    没人能回答出来,你可以把分给你认为尽力给你回答的人,这样你结帖率高了,会更有人来给你回答
    积分也可以换取下载积分的,100分可用分换20下载分
      

  3.   

    没有主键是肯定不行的,能看一下你的dao层的代码吗??
      

  4.   


    其实昨天公司高层也有一个给我提过复合主键用了,但是只知道在配置文件中用,
    我的实体类是实例化的,公司是内网,无法上网,这是我随便打的例子。
    大哥,能不能提供个Annotation配置实体类的例子求赐教,昨天的帖子会和今天的一起结了,都是一个问题
      

  5.   


    没有让你加主键。。 在hibernate里面,他需要主键来标识唯一性,   你只需要改实体,将所有的属性做为一个联合主键,在实体里面体现出映射就好了。
      

  6.   

    这个复合主键告诉  hibernate, 我是用所有的列来标识唯一性的
      

  7.   

    @Embeddable  
    public class StudentPK implements Serializable{  }将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法然后在你的实体类里面加上一个: @Id
     private StudentPK pk;  
      

  8.   


    hashcode() equals方法,
    不懂
    弱弱的最后请教一次
      

  9.   

    你的IDE应该支持自动生成hashcode和equals。
    步骤:
    右键--source--generate hashcode and equals
      

  10.   

    费这么多事 加个uuid主键不就完了  没有主键的表 能干神马?
      

  11.   


    @GenericGenerator(name = "generator", strategy = "uuid")   
      @Id 
      @GeneratedValue(generator = "generator")   
    结果还是错误的,
    难道是我配置错了嘛,
    麻烦您出示正确答案
      

  12.   

    问题是,你的表符合什么范式?表内记录会不会重复?如果会重复的话,hibernate的联合主键也没法帮你,因为没法区分是哪条数据。
    hibernate对象需要一个id键来标识这个数据的唯一性,如果你的数据库表设计不符合的话,可能不适合用hibernate ok?
      

  13.   

    我按您说的做了
    @Embeddable
    public class StudentPK implements Serializable{
       //属性
       //setget
       //重写hashcode和equals
    }
    @Entity   
    3.@Table(name = “tb_cat”)   
    4.public class Cat{   
      @GenericGenerator(name = "generator", strategy = "increment")   
      @Id //我没有id 但是去掉就会报错
     private StudentPK pk;
      @GeneratedValue(generator = "generator")   
    7. private String date;   
    8. @Column(name = “name”)   
    9. private String name;   
    11. @Column(name = “createDate”)   
    12. private int number;   
    13. //….getter、setter方法省略   
    14.}   
    是这样吧  ,反而没有数据出来了
      

  14.   

    那就用联合主键就行,还有,你的注解位置有些问题吧。另外,库里没有主键,就别用generator increment了。这个是给自增主键使的。那个createDate是唯一的吗?如果是的话,用它做主键吧。
      

  15.   


    第一次用Annotation,不知道怎么配置我的表中没有单个字段是唯一的 只有 date和number一起才是唯一的
      

  16.   

    http://a3mao.iteye.com/blog/195151 参考一下这个吧。联合主键我没使用annotation做过,不过hibernate底层原理是一样的。
    祝成功
      

  17.   


    没有主键的表意味着允许重复的数据。用所有字段作为符合主键 ,查询数据时 是不是会漏掉一些重复的数据比如有两条‘A,B,C,D’数据,但只能查出来一条
      

  18.   

    我是来顶的,不懂hibernate的说。
      

  19.   


    这要看表的数据结构来定
    比如 我的表中 有date 和 info  2个属性,2组数据不会出现同时出现的几率,如1990年有猪,在1990年就会再有猪了  只是在后面的number+1
      

  20.   

    亲..额..好恶心...友情提示,MyEclipse -> DB Browser -> 选中你要映射的表 右键 -> Hibernate Reverse Engineering
    可以让ME自动生成带有复合主键的表映射
      

  21.   

    hibernate映射要有主键才行...数据库表没有主键的话 用hibernate查询不到的....这是小生半年使用的小小经验...
      

  22.   

    最后没有用annotation配置出来,
    用原生态sql取得到了正确的数据,在封装到的实体类,哎,就是麻烦了点