二.对象关系映射-part1

 

一、怎样映射一个实体

一个实体就是简单 Java -a Plain Old Java Object (POJO) ,并遵循下列规则:

  1. 实体类必须标注 @javax.persistence.Entity 注解 ( 或者用 XML 描述为一个实体 )

  2. @javax.persistence.Id 注解必须使用,指出 a primary key

  3. 实体类必须有一个无参的构成函数,并且是 public protected 类型。

  4. 实体类必须是顶级类。枚举或接口不能成为实体类

  5. 实体类不能是 final 类型的。实体的方法和变量也不能是 final 的。

  6. 如果需要远程传输对象,必须实现 Serializable 接口。


我们来看一个最简单的例子:

 

@Entity
public class Book {
	@Id 
	private Long id;
	private String title;
	private Float price;
	private String description;
	private String isbn;
	private Integer nbOfPage;
	private Boolean illustrations;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public Integer getNbOfPage() {
		return nbOfPage;
	}
	public void setNbOfPage(Integer nbOfPage) {
		this.nbOfPage = nbOfPage;
	}
	public Boolean getIllustrations() {
		return illustrations;
	}
	public void setIllustrations(Boolean illustrations) {
		this.illustrations = illustrations;
	}
	
}

下图表现实体类与数据库映射关系:

二、基于例外的配置

实体类默认映射规则:

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`)
) 

猜你喜欢

转载自forge.iteye.com/blog/1069410