如果不使用hibernate映射而使用JPA的Table注解
方式如下
@Table标记表示所映射表的属性,该注释的属性定义如下。
@Target({TYPE}) @Retention(RUNTIME)
public @interface Table {
String name() default "";
String catalog() default "";
String schema() default "";
UniqueConstraint[] uniqueConstraints() default {};
}
在使用此@Table标记时,需要注意以下几个问题。
l 此标记需要标注在类名前,不能标注在方法或属性前。
l name属性表示实体所对应表的名称,默认表名为实体的名称。
l catalog和schema属性表示实体指定的目录名或是数据库名,这根据不同的数据库类型有所不同。
l uniqueConstraints属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件,默认没有约束条件。
l 若使用uniqueConstraints标记时,需要配合标记UniqueConstraint标记来使用。
下面举几个小例子。
示例一:指定数据库中指定的表名为“tb_contact”。
@Entity
@Table(name=”tb_contact”)
public class ContactEO implements java.io.Serializable {
……
}
提示:在使用注释时,属性值是不区分大小写的,这是因为许多不同的数据库都不区分大小写,例如name=”tb_contact”和name=”TB_CONTACT”的设置是一样的。
示例二:指定Schema为“jpademo”,表名为“tb_contact”。
@Entity
@Table(name=”tb_contact”,schema=”jpademo”)
public class ContactEO implements java.io.Serializable {
……
}
示例三:指定表的name字段和email字段为唯一表示,也就是说,不能同时存在完全相同name和email值的记录。
@Entity
@Table(name = "contact", uniqueConstraints = {
@UniqueConstraint(
columnNames = { "name", "email" }
)}
)
public class ContactEO {
public ContactEO() {
}
private Integer id;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
这样定义唯一约束后,创建表的SQL语句为:
CREATE TABLE contact (
id int(20) NOT NULL,
name varchar(255) default NULL,
email varchar(255) default NULL,
PRIMARY KEY (id),
UNIQUE KEY name_email (name,email)
);
建表的SQL语句中其中,UNIQUE KEY 表示创建了一个唯一约束,它的规则是字段name和字段email的值不能同时相同。
而在标注的实体中,@UniqueConstraint表示唯一约束的定义,它的注释定义如以下所示。
@Target({}) @Retention(RUNTIME)
public @interface UniqueConstraint {
String[] columnNames();
}
其中columnNames表示该唯一约束所同时约束的字段名,可以有多个。同时该标记必须使用在@Table注释中。
需要注意,当定义多个唯一约束时,要用“,”分隔。例如以下所示。
@Table(name = "contact", uniqueConstraints = {
@UniqueConstraint(
columnNames = { "name", "email" }
),
@UniqueConstraint(
columnNames = { "col_1", "col_2" }
)}
)
其中加粗显示的部分为该实体定义的另外一个唯一约束。
欢迎加我的qq技术群425783133