在Teacher类上注解了一个复合主键
@IdClass(TeacherPK.class)
将id和name设置为复合主键
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) public int getId() { return id; }
@Id public String getName() { return name; }
我想让id自动增长,但是总是报错类型不匹配。
15:42:53,391 ERROR org.hibernate.property.BasicPropertyAccessor:118 - IllegalArgumentException in class: com.bjsxt.hibernate.TeacherPK, setter method of property: id 15:42:53,391 ERROR org.hibernate.property.BasicPropertyAccessor:122 - expected type: int, actual value: org.hibernate.id.IdentifierGeneratorHelper$2
复合主键的自动增长意义何在?
IDENTITY是在原有值上累加一个数字,默认是1.
回复 @firebroo:所以啊,无法默认进行数学运算的对象是无法默认自增的(大概)不知道有没有意义,初学hibernate,我知道identity的意思也是遇到这个问题,一直在纠结。
查了一整天的资料了,最新的结果是复合主键可以实现自增,但保存后没有办法返回自增后的ID。数据库设计的字段自增长的,在保存时,new一个复合类型的主键,那个要自增的就不用设置值,:
TestEntityte=newTestEntity();te.setPk_id(newAggId());dao.save(te);蛋疼的是没有返回。
如果没有这方面的需求可以用用。
现在想的方案只有自己维护主键了,但主键维护不易,考虑模仿使用Hibernate的GenerationType.Type模式,自己建一张主键维护表,需要主键时,自增一条这个表的记录,然后拿到他的自增ID作为主键设置进去,但这样一来每个复合主键都需要的话,不知道影不影响性能。因为我的框架里面,几乎所有的都是复合主键。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。