01.核心提示:JPA 注解的几个要点 1.设置Pojo为实体 @Entity //标识这个pojo是一个jpa实体 public class Users implements Serializable{ } 2.设置表名 @Entity @Table (name= users ) //指定表名为users public class Users implements Serializable{ } 3.设置主键 public
02.JPA 注解的几个要点
03.
04.1.设置Pojo为实体
05.
06.
07.@Entity //标识这个pojo是一个jpa实体
08.public class Users implements Serializable {
09.}
10.
11.
12.2.设置表名
13.
14.
15.@Entity
16.@Table(name = "users") //指定表名为users
17.public class Users implements Serializable {
18.}
19.
20.
21.3.设置主键
22.
23.
24.public class Users implements Serializable {
25.@Id
26.private String userCode;
27.
28.
29.4. 设置字段类型
30.通过@Column注解设置,包含的设置如下
31..name:字段名
32..unique:是否唯一
33..nullable:是否可以为空
34..inserttable:是否可以插入
35..updateable:是否可以更新
36..columnDefinition: 定义建表时创建此列的DDL
37..secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
38.
39.
40.@Column(name = "user_code", nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,非空
41.private String userCode;
42.@Column(name = "user_wages", nullable = true, precision=12, scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位小数,可以为空
43.private double wages;
44.@Temporal(TemporalType.DATE)//设置为时间类型
45.private Date joinDate;
46.
47.
48.
49.5.字段排序
50.在加载数据的时候可以为其指定顺序,使用@OrderBy注解实现
51.
52.
53.@Table(name = "USERS")
54.public class User {
55.@OrderBy(name = "group_name ASC, name DESC")
56.private List books = new ArrayList();
57.}
58.
59.
60.6.主键生成策略
61.
62.
63.public class Users implements Serializable {
64.@Id
65.@GeneratedValue(strategy=GenerationType.IDENTITY)//主键自增,注意,这种方式依赖于具体的数据库,如果数据库不支持自增主键,那么这个类型是没法用的
66.@Column(name = "user_id", nullable = false)
67.private int userId;
68.
69.
70.public class Users implements Serializable {
71.@Id
72.@GeneratedValue(strategy=GenerationType.TABLE)//通过一个表来实现主键id的自增,这种方式不依赖于具体的数据库,可以解决数据迁移的问题
73.@Column(name = "user_code", nullable = false)
74.private String userCode;
75.
76.
77.public class Users implements Serializable {
78.@Id
79.@GeneratedValue(strategy=GenerationType.SEQUENCE)//通过Sequence来实现表主键自增,这种方式依赖于数据库是否有SEQUENCE,如果没有就不能用
80.@SequenceGenerator(name="seq_user")
81.@Column(name = "user_id", nullable = false)
82.private int userId;
83.
84.
85.
86.7.一对多映射关系
87.有T_One和T_Many两个表,他们是一对多的关系,注解范例如下
88.主Pojo
89.
90.
91.@Entity
92.@Table(name = "T_ONE")
93.public class One implements Serializable {
94.private static final long serialVersionUID = 1L;
95.@Id
96.@Column(name = "ONE_ID", nullable = false)
97.private String oneId;
98.@Column(name = "DESCRIPTION")
99.private String description;
100.@OneToMany(cascade = CascadeType.ALL, mappedBy = "oneId")//指向多的那方的pojo的关联外键字段
101.private Collection<Many> manyCollection;
102.
103.
104.子Pojo
105.
106.
107.@Entity
108.@Table(name = "T_MANY")
109.public class Many implements Serializable {
110.private static final long serialVersionUID = 1L;
111.@Id
112.@Column(name = "MANY_ID", nullable = false)
113.private String manyId;
114.@Column(name = "DESCRIPTION")
115.private String description;
116.
117.@JoinColumn(name = "ONE_ID", referencedColumnName = "ONE_ID")//设置对应数据表的列名和引用的数据表的列名
118.@ManyToOne//设置在“一方”pojo的外键字段上
119.private One oneId;
120.
121.
122.
123.8.多对多映射关系
124.貌似多对多关系不需要设置级联,以前用hibernate的时候着实为多对多的级联头疼了一阵子,JPA的多对多还需要实际的尝试一下才能有所体会。
125.估计JPA的多对多也是可以转换成两个一对多的。
126.
127.第一个Pojo
128.
129.
130.@Entity
131.@Table(name = "T_MANYA")
132.public class ManyA implements Serializable {
133.private static final long serialVersionUID = 1L;
134.@Id
135.@Column(name = "MANYA_ID", nullable = false)
136.private String manyaId;
137.@Column(name = "DESCRIPTION")
138.private String description;
139.@ManyToMany
140.@JoinTable(name = "TMANY1_TMANY2", joinColumns = {@JoinColumn(name = "MANYA_ID", referencedColumnName = "MANYA_ID")}, inverseJoinColumns = {@JoinColumn(name = "MANYB_ID", referencedColumnName = "MANYB_ID")})
141.private Collection<ManyB> manybIdCollection;
142.
143.
144.第二个Pojo
145.
146.
147.@Entity
148.@Table(name = "T_MANYB")
149.public class ManyB implements Serializable {
150.private static final long serialVersionUID = 1L;
151.@Id
152.@Column(name = "MANYB_ID", nullable = false)
153.private String manybId;
154.@Column(name = "DESCRIPTION")
155.private String description;
156.@ManyToMany(mappedBy = "manybIdCollection")
157.private Collection<ManyA> manyaIdCollection;
158.
159.
160.
161.9.一对一映射关系
162.主Pojo
163.
164.
165.@Entity
166.@Table(name = "T_ONEA")
167.public class OneA implements Serializable {
168.private static final long serialVersionUID = 1L;
169.@Id
170.@Column(name = "ONEA_ID", nullable = false)
171.private String oneaId;
172.@Column(name = "DESCRIPTION")
173.private String description;
174.@OneToOne(cascade = CascadeType.ALL, mappedBy = "oneA")//主Pojo这方的设置比较简单,只要设置好级联和映射到从Pojo的外键就可以了。
175.private OneB oneB;
176.
177.从Pojo
178.
179.
180.@Entity
181.@Table(name = "T_ONEB")
182.public class OneB implements Serializable {
183.private static final long serialVersionUID = 1L;
184.@Id
185.@Column(name = "ONEA_ID", nullable = false)
186.private String oneaId;
187.@Column(name = "DESCRIPTION")
188.private String description;
189.@JoinColumn(name = "ONEA_ID", referencedColumnName = "ONEA_ID", insertable = false, updatable = false)//设置从方指向主方的关联外键,这个ONEA_ID其实是表T_ONEA的主键
190.@OneToOne
191.private OneA oneA;
192.
193.
194.
195.10 大字段
196.
197.
198.@Lob //对应Blob字段类型
199.@Column(name = "PHOTO")
200.private Serializable photo;
201.@Lob //对应Clob字段类型
202.@Column(name = "DESCRIPTION")
203.private String description;
204.
205.
206.
207.11.瞬时字段
208.不需要与数据库映射的字段,在保存的时候不需要保存倒数据库
209.
210.
211.@Transient
212.private int tempValue;
213.
214.public int getTempValue(){
215.get tempValue;
216.}
217.
218.public void setTempValue(int value){
219.this.tempValue = value;
220.}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gdweijin/archive/2010/07/28/5770655.aspx