如果将一个类定义为实体类,则该类需符合以下要求:
1,必须用注释 javax.persistence.Entity 声明该类;
2,该类必须有一个 public 或者 protected 的 无参构造函数,也可以有其他构造函数,但前者是必须的,后者是可选的;
3,该类以及该类中的方法,持久成员变量一定不能声明为 fianl;
4,如果该类的实例需要作为值进行传递(如通过会话bean的 remote接口定义的方法进行传递),则该类必须实
现 Serializable 接口;
5,实体类可能继承实体类和非实体类,但该实体类必须继承实体类;
6,实体类中的持久成员变量必须声明为 private,protected 或者 package-private,并且只能通过该实体类中的成员方法
访问持久成员变量。
可以作为实体类持久成员变量的类型如下:
1,java 的 8 种基本类型;
2,java.lang.String;
其他 serializable 类型:
3,8 种基本类型的包装类型;
4,java.math.BigInteger
5,java.math.BigDecimal
6,java.util.Date
7,java.util.Calendar
8,java.sql.Date
9,java.sql.Time
10,java.sql.TimeStamp
11,自定义的 serializable 类型
12,byte[]
13,Byte[]
14,char[]
15,Character[]
16,枚举类型
17,其他实体类或实体类的集合
18,嵌入类
实体类集合可用的集合类型如下:
1,java.util.Collection
2,java.util.Set
3,java.util.List
4,java.util.Map
可作为实体类主键的类型如下:
1,基本类型及其包装类;
2,java.lang.String;
3,java.util.Date (映射 temporal 类型必须为 DATE)
4,java.sql.Date
主键类的要求如下:
1,类的修饰符必须为 public;
2,类的属性必须为 private,protected 或者 package-private;
3,类必须有一个 public 的默认构造函数;
4,类必须重写 hashCode() 和 equals(Object other) 方法;
5,类必须 serializable;
6,组合主键必须描述和映射到实体类的多个域或属性上,或者映射到嵌入类;
7,主键类的属性的属性名和属性类型必须与映射到的实体类的对应属性相同;
实体之间的连接关系:
实体之间有四种连接关系:
one-to-one, one-to-many, many-to-one, 和 many-to-many,并且实体之间的这些关系可以是双向关系或单向关系。
关系的方向可以是双向的或单向的。双向关系有关系的拥有端和逆端,单向关系仅仅有关系的拥有端。
实体双向关系必须符合以下要求:
1,双向关系的逆端必须指定 @OneToOne, @OneToMany, 或 @ManyToMany 注释中的 mappedBy 属性,且该属性指定的
值必须与关系拥有端实体类指示的逆端成员变量名字相同;
2,many-to-one 双向关系的 many 端一定不能指定 mappedBy 属性,因为该端一定是双向关系的拥有端;
3,one-to-one 双向关系中 关系拥有端是包含外键的实体类;
4,many-to-many 双向关系中 关系拥有端和关系逆端可以任意指定。
单向关系就是只在关系一端的实体类上指定关系。