JPA的Table注解

如果不使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值