二.对象关系映射-part1
?
?
一、怎样映射一个实体
一个实体就是简单Java类-aPlain Old Java Object (POJO),并遵循下列规则:
实体类必须标注@javax.persistence.Entity注解(或者用XML描述为一个实体)
@javax.persistence.Id注解必须使用,指出aprimary key
实体类必须有一个无参的构成函数,并且是public或protected类型。
实体类必须是顶级类。枚举或接口不能成为实体类
实体类不能是final类型的。实体的方法和变量也不能是final的。
如果需要远程传输对象,必须实现Serializable接口。
我们来看一个最简单的例子:
?
?
?
二、基于例外的配置
实体类默认映射规则:
1.实体类名被映射到相同的数据库表名(如:Book实体被映射到BOOK表)。如果你需要映射到另一个表名,你需要用@Table注释。
2.属性名被映射到相同的列名(如:id属性,或者getId()方法,被映射到一个ID的列名)。如果你想要修改默认的映射,你需要使用@Column注解。
3.Java基本数据类型用JDBC规则映射数据库数据类型。String被映射为VARCHAR,long被映射为BIGINT,Boolean被映射为SMALLINT等等。String默认映射的列大小为255(VARCHAR(255)).注意,默认映射规则根据不同的数据库而不同。例如:String在Mysql中被映射为为VARCHAR,而在Oracle中被映射为VARCHAR2。Integer在Mysql中被映射为INT,Oracle中被映射为NUMBER。
根据这些规则,BOOK实体类被映射到Mysql表,其DDL为:
?
CREATE TABLE `book` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `description` longtext, `illustrations` bit(1) DEFAULT NULL, `isbn` varchar(255) DEFAULT NULL, `nbOfPage` int(11) DEFAULT NULL, `price` float DEFAULT NULL, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`))