如果没人能回答出提问,我csdn积分要来何用(回答出问题者给全分,也可以追加分)

时间:2022-06-16 14:40:20
我用@注解配置实体类映射  
不知道是不是表没有主键的原因,我查出来的数据都是第一条,比如我查到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也不知道,往上也搜索不到
,还有无满意结贴输入什么密码啊,这么多打酱油的

38 个解决方案

#1


亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。

#2


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

#3


新搞个主键字段如行号什么的,@Id加到那个字段上吧。

#4


你是怎么查询数据的?

#5


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

#6


引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

#7


引用 6 楼 liuyuhua0066 的回复:
引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,他也不同意修改

#8


引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。


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

求赐教,昨天的帖子会和今天的一起结了,都是一个问题

#9


引用 7 楼 guoyang842 的回复:
引用 6 楼 liuyuhua0066 的回复:

引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,他也不同意修改


没有让你加主键。。 在hibernate里面,他需要主键来标识唯一性,

   你只需要改实体,将所有的属性做为一个联合主键,在实体里面体现出映射就好了。

#10


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

#11


@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;  

#12


引用 11 楼 zl3450341 的回复:
@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;


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

#13


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

#14


引用 11 楼 zl3450341 的回复:
@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;

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

#15


学习下。

#16


引用 14 楼 zn85600301 的回复:
引用 11 楼 zl3450341 的回复:

@Embeddable
public class StudentPK implements Serializable{

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

@Id
private StudentPK pk;

费这么多事 加……


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

#17


你就按我说的做。哎,用一个复合主键就搞定了

#18


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

#19


引用 17 楼 zl3450341 的回复:
你就按我说的做。哎,用一个复合主键就搞定了

我按您说的做了
@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.}   


是这样吧  ,反而没有数据出来了

#20


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


表内的时间和数量做复合主键是不会重复的

#21


友情帮顶,把贴顶起来!

#22


那就用联合主键就行,还有,你的注解位置有些问题吧。另外,库里没有主键,就别用generator increment了。这个是给自增主键使的。

那个createDate是唯一的吗?如果是的话,用它做主键吧。

#23


引用 22 楼 forestandriver23 的回复:
那就用联合主键就行,还有,你的注解位置有些问题吧。另外,库里没有主键,就别用generator increment了。这个是给自增主键使的。

那个createDate是唯一的吗?如果是的话,用它做主键吧。


第一次用Annotation,不知道怎么配置

我的表中没有单个字段是唯一的 只有 date和number一起才是唯一的

#24


帮顶个

#25


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

#26


引用 9 楼 zl3450341 的回复:
引用 7 楼 guoyang842 的回复:

引用 6 楼 liuyuhua0066 的回复:

引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,……


没有主键的表意味着允许重复的数据。

用所有字段作为符合主键 ,查询数据时 是不是会漏掉一些重复的数据

比如有两条‘A,B,C,D’数据,但只能查出来一条

#27


说错了,

没有主键的表允许有重复数据

用所有字段做符合主键意味着 不允许有重复数据 

逻辑意义可是不同的哦

#28


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

#29


引用 27 楼 rainbowsix 的回复:
说错了,

没有主键的表允许有重复数据

用所有字段做符合主键意味着 不允许有重复数据 

逻辑意义可是不同的哦


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

#30


很感谢大家,用了复合主键还是报错的。不知道是不是运用错了,有谁能给个完整的例子,晚上还没有 就结贴了。继续坐等

#31


一定要有主键的,没有的话,就把整个实体作为主键

#32


代码放出来看看。
这个东西吧,经历点错误才能学到东西,呵呵,楼主加油。
引用 30 楼 guoyang842 的回复:
很感谢大家,用了复合主键还是报错的。不知道是不是运用错了,有谁能给个完整的例子,晚上还没有 就结贴了。继续坐等

#33


亲..额..好恶心...

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

#34


学习了,顶一下!!!!!!

#35


打个酱油

#36


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

#37


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


在配置文件用复合主键是可以的,只是我没配出来

#38


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

#1


亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。

#2


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

#3


新搞个主键字段如行号什么的,@Id加到那个字段上吧。

#4


你是怎么查询数据的?

#5


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

#6


引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

#7


引用 6 楼 liuyuhua0066 的回复:
引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,他也不同意修改

#8


引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

 解决办法就是:将所有的列做为复合主键,记得要序列化哦。


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

求赐教,昨天的帖子会和今天的一起结了,都是一个问题

#9


引用 7 楼 guoyang842 的回复:
引用 6 楼 liuyuhua0066 的回复:

引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,他也不同意修改


没有让你加主键。。 在hibernate里面,他需要主键来标识唯一性,

   你只需要改实体,将所有的属性做为一个联合主键,在实体里面体现出映射就好了。

#10


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

#11


@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;  

#12


引用 11 楼 zl3450341 的回复:
@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;


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

#13


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

#14


引用 11 楼 zl3450341 的回复:
@Embeddable  
public class StudentPK implements Serializable{  

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

 @Id
 private StudentPK pk;

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

#15


学习下。

#16


引用 14 楼 zn85600301 的回复:
引用 11 楼 zl3450341 的回复:

@Embeddable
public class StudentPK implements Serializable{

}

将你所有的属性都写进去,名子要一样哦。   要重写hashcode() equals方法

然后在你的实体类里面加上一个:

@Id
private StudentPK pk;

费这么多事 加……


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

#17


你就按我说的做。哎,用一个复合主键就搞定了

#18


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

#19


引用 17 楼 zl3450341 的回复:
你就按我说的做。哎,用一个复合主键就搞定了

我按您说的做了
@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.}   


是这样吧  ,反而没有数据出来了

#20


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


表内的时间和数量做复合主键是不会重复的

#21


友情帮顶,把贴顶起来!

#22


那就用联合主键就行,还有,你的注解位置有些问题吧。另外,库里没有主键,就别用generator increment了。这个是给自增主键使的。

那个createDate是唯一的吗?如果是的话,用它做主键吧。

#23


引用 22 楼 forestandriver23 的回复:
那就用联合主键就行,还有,你的注解位置有些问题吧。另外,库里没有主键,就别用generator increment了。这个是给自增主键使的。

那个createDate是唯一的吗?如果是的话,用它做主键吧。


第一次用Annotation,不知道怎么配置

我的表中没有单个字段是唯一的 只有 date和number一起才是唯一的

#24


帮顶个

#25


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

#26


引用 9 楼 zl3450341 的回复:
引用 7 楼 guoyang842 的回复:

引用 6 楼 liuyuhua0066 的回复:

引用 1 楼 zl3450341 的回复:
亲,hibernate用的时候,如果你没有定义主键映射,是不行的。是发生你说的这种数据重复的现象

解决办法就是:将所有的列做为复合主键,记得要序列化哦。


哈哈,亲,记得一定要有主键

不能加主键,副总裁做的数据库表,我没权利,……


没有主键的表意味着允许重复的数据。

用所有字段作为符合主键 ,查询数据时 是不是会漏掉一些重复的数据

比如有两条‘A,B,C,D’数据,但只能查出来一条

#27


说错了,

没有主键的表允许有重复数据

用所有字段做符合主键意味着 不允许有重复数据 

逻辑意义可是不同的哦

#28


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

#29


引用 27 楼 rainbowsix 的回复:
说错了,

没有主键的表允许有重复数据

用所有字段做符合主键意味着 不允许有重复数据 

逻辑意义可是不同的哦


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

#30


很感谢大家,用了复合主键还是报错的。不知道是不是运用错了,有谁能给个完整的例子,晚上还没有 就结贴了。继续坐等

#31


一定要有主键的,没有的话,就把整个实体作为主键

#32


代码放出来看看。
这个东西吧,经历点错误才能学到东西,呵呵,楼主加油。
引用 30 楼 guoyang842 的回复:
很感谢大家,用了复合主键还是报错的。不知道是不是运用错了,有谁能给个完整的例子,晚上还没有 就结贴了。继续坐等

#33


亲..额..好恶心...

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

#34


学习了,顶一下!!!!!!

#35


打个酱油

#36


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

#37


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


在配置文件用复合主键是可以的,只是我没配出来

#38


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