Hibenate @Table 注解
来源:互联网 发布:商建刚 知产 编辑:程序博客网 时间:2024/06/18 18:23
@Table:
当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
@Table 标注的常用选项是 name,用于指明数据库的表名
@Table标注还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。uniqueConstraints选项用于设置约束条件,通常不须设置。
name属性:
name属性用于指定数据库表名称
若不指定则以实体类名称作为表名
@Table@Entitypublic class Customer { private Integer id; private String name; private String email; private int age; ......}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
生成的数据库表DDL:
CREATE TABLE `customer` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
若指定name属性名称:
@Table(name="CUSTOMERS")@Entitypublic class Customer { private Integer id; private String name; private String email; private int age; ......}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
则生成的数据库表DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
从上述两个例子中的数据库DDL中可以看出表名的变化
catalog属性:
catalog属性用于指定数据库实例名,一般来说persistence.xml文件中必须指定数据库url,url中将包含数据库实例
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa" />
- 1
- 1
当catalog属性不指定时,新创建的表将出现在url指定的数据库实例中
当catalog属性设置名称时,若数据库存在和指定名称一致的实例,新创建的表将出现在该实例中,
@Table(name="CUSTOMERS",catalog="hibernate")@Entitypublic class Customer { private Integer id; private String name; private String email; private int age; ......}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
在数据库hibernate实例中将创建一张名叫customers的新表
若数据库不存在和指定名称一致的实例,则创建表失败,提示错误
ERROR: HHH000388: Unsuccessful: create table hiber.CUSTOMERS (ID integer not null auto_increment, Age integer, Email varchar(255), Name varchar(255), primary key (ID))
所以该属性一般不需要设置
schema属性:
作用与catalog属性作用一致,可自行测试
uniqueConstraints属性:
uniqueConstraints属性用于设定约束条件
@Table(name="CUSTOMERS",uniqueConstraints={@UniqueConstraint(columnNames={"name"})})@Entitypublic class Customer { private Integer id; private String name; private String email; private int age; ......}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
数据库DDL:
CREATE TABLE `customers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `age` int(11) NOT NULL, `email` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `UK_kt165w8o83hunljcal4ufcmk9` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
uniqueConstraints={@UniqueConstraint(columnNames={“name”})} 表示name列的值不能重复
约束也可以是多列约束
@Table(name="CUSTOMERS",uniqueConstraints={@UniqueConstraint(columnNames={"name","email"})})@Entitypublic class Customer { private Integer id; private String name; private String email; private int age; ......}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
注意写法!
uniqueConstraints={@UniqueConstraint(columnNames={“name”,”email”}) 的意思是customer表中不同同时存在name+email的相同记录
比如:存在一条记录id=1,name=”张三”,email=”zhangsan@163.com”,那么就不能有另一个id表示的记录name=”张三”,email=”zhangsan@163.com”
数据库DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `UK_a4gmx9uvdyb7q19sf3seob2l8` (`Name`,`Email`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
uniqueConstraints是一个数组,可以指定多组约束:
uniqueConstraints={@UniqueConstraint(columnNames={"name","email"}),@UniqueConstraint(columnNames={"name","age"})}
- 1
- 1
数据库DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `UK_a4gmx9uvdyb7q19sf3seob2l8` (`Name`,`Email`), UNIQUE KEY `UK_ag4xexpudoihe3uvpsl9yvhsg` (`Name`,`Age`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
总结:
1.当实体类名和数据库表名不一致时,name属性可以实现映射,及时表名一致,也推荐使用,提高程序的可读性
2.catalog和sechema属性一般不需要指定
3.uniqueConstraints属性一般也不需要指定,但是如有需要则可以指定
转载地址:http://blog.csdn.net/rickesy/article/details/50788140
- Hibenate @Table 注解
- Hibenate-注解
- hibenate
- JPA的Table注解
- hitbernate注解(Table)
- @Table标记注解
- Hibernate的@Table注解
- spring+ hibenate+proxool 配置两个proxool连接池时报错 Every derived table must have its own alias
- @Table,@Column等注解失效
- 3. JPA @Table 注解详解
- Struts和Hibenate
- hibenate+struts学习笔记
- Hibenate JPA资料
- hibenate集合映射
- hibenate-mapping 出错
- hibenate的面试总结.
- hibenate的面试总结.
- Hibenate中多表关联
- 基数排序
- Spring Boot工程中如果有多个main()函数,需要指定启动类
- eclipse开发web项目时如何自动将web项目部署到tomcat的webapps目录下
- windows下boost编译好的库下载地址
- 总结kafka的consumer消费能力很低的情况下的处理方案
- Hibenate @Table 注解
- Mxnet图片分类(2)训练模型
- 正则的那些事儿(未完待续)
- Docker
- <深度学习优化策略-4> 基于Gate Mechanism的激活单元GTU、GLU
- 二进制,数字只有0和1
- C. International Olympiad
- 2017-05-24 DBA日记,删除asm diskgroup过程
- 学习curses图形库(五)