最近在做项目时碰到了使用hibernate联合主键的情况。在做Unit testing的时候我希望hibernate帮我自动创建表,可是却发现总是创建失败。我使用的是mysql 5.1做为数据库,联合主键代码如下
/** * Entity class */ @Entity @Table(name="person") public class Person implements Serializable{ @EmbeddedId private PersonPK pk; @Column private String company; ....... } /** * Primary key class */ @Embeddable public class PersonPK implements Serializable{ @Column(name="name") private String name; @Column(name="email") private String email; @Column(name="address") private String address; @Column(name="id") private String id; ....... }
后来经过分析,发现在生成ddl的时候,这四个主键field会创建为长度为255字节的varchar类型column, 而mysql默认的key值长度为1000字节,从而导致这个联合主键超出长度限制(255×4>1000)而建表失败。那么解决方法就是使用columnDefinition来限定其长度。
/** * Primary key class */ @Embeddable public class PersonPK implements Serializable{ @Column(name="name", columnDefinition="varchar(50)") private String name; @Column(name="email", columnDefinition="varchar(50)") private String email; @Column(name="address", columnDefinition="varchar(50)") private String address; @Column(name="id", columnDefinition="varchar(50)") private String id; ....... }
这样的话hibernate生成ddl的时候就会使用varchar(50)来代替,从而避免联合主键过长的问题。当然如果其他DBMS中没有这个限制的话可以不用做修改,或根据相应限制做对应修改。
相关推荐
hibernate中用到联合主键的看看就会了很棒的资料
Hibernate联合主键,MyEclipse的例子
hibernate的联合主键怎么设置、hibernate的联合主键怎么设置.doc
hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档
关于Hibernate的各种主键生成策略与配置详解
联合主键用Hibernate注解映射方式主要有三种: 第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键...
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
hibernate复合主键的实例,hibernate复合主键的实例。
hibernate复合主键设置,里面很全面的配置,可以拿到直接用
主要介绍了java hibernate使用注解来定义联合主键的相关资料,需要的朋友可以参考下
NULL 博文链接:https://liuna718-163-com.iteye.com/blog/748089
Hibernate中主键生成策略,开发的时候经常会用到的我都整理到这里了~
请更名为 Hibernate复合主键.part2.rar
hibernate的主键生成策略介绍,详细介绍了有关hibernate的常用主键生成策略,希望对一些正在学习hibernate的同学有一定的帮助
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
Hibernate各种主键生成策略与配置详解 1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用...
1主键常用的生成策略 2对数据库的依赖性总结 3关于主键生成策略的选择 详细解释
Hibernate主键生成方式 1.identity方式 2.increment方式 3.assigned方式 4.sequence方式 5.native方式 6.UUID方式
Hibernate主键生成策略.doc ··········