Scripts 学盟

标题: JPA 的注解续 [打印本页]

作者: 那个谁    时间: 2012-7-4 16:13:39     标题: JPA 的注解续

12、@ManyToMany

可选

@ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理

targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class

mappedBy:表示多对多关联的另一个实体类的对应集合属性名称

示例:

    User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立ManyToMany关联

    @Entity

    public class User {

       private List books;

       @ManyToMany(targetEntity=package.Book.class)

       public List getBooks() {

           return books;

       }

       public void setBooks(List books) {

           this.books=books;

       }

    }

   

    @Entity

    public class Book {

       private List users;

       @ManyToMany(targetEntity=package.Users.class, mappedBy="books")

       public List getUsers() {

           return users;

       }

       public void setUsers(List users) {

           this.users=users;

       }

    }

两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性,

需要注意的是,有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称

利用ORM工具自动生成的表除了User和Book表外,还自动生成了一个User_Book表,用于实现多对多关联




MappedBy:写在关系的被维护端。如:@OneToOne(mappedBy=“idCord”)


idcord是指:对方类的哪一个属性是来 维护关系的。


13、@MappedSuperclass

可选

@MappedSuperclass可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解

示例:

    @MappedSuperclass

    public class Employee() {

       ....

    }

   

    @Entity

    public class Engineer extends Employee {

       .....

    }

    @Entity

    public class Manager extends Employee {

       .....

    }

14、@Embedded

可选

@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.

例如User包括id,name,city,street,zip属性.

我们希望city,street,zip属性映射为Address对象.这样,User对象将具有id,name和address这三个属性.

Address对象必须定义为@Embededable

示例:

    @Embeddable

    public class Address {city,street,zip}

    @Entity

    public class User {

       @Embedded

       public Address getAddress() {

           ..........

       }

    }



Hibernate验证注解

注解

适用类型

说明

示例



@Pattern

String

通过正则表达式来验证字符串

@attern(regex=”[a-z]{6}”)

@Length

String

验证字符串的长度

@length(min=3,max=20)

@Email

String

验证一个Email地址是否有效

@email

@Range

Long

验证一个整型是否在有效的范围内

@Range(min=0,max=100)

@Min

Long

验证一个整型必须不小于指定值

@Min(value=10)

@Max

Long

验证一个整型必须不大于指定值

@Max(value=20)

@Size

集合或数组

集合或数组的大小是否在指定范围内

@Size(min=1,max=255)


以上每个注解都可能性有一个message属性,用于在验证失败后向用户返回的消息,还可以三个属性上使用多个注解






下面:是本人续加的:

1,



2,枚举类型:

@Enumerated(EnumType.STRING)





[java] view plaincopyprint?
01.package cn.itm.bean;  
02.  
03.public enum Gender {  
04.    MAN,WOMEN  
05.}  




[java] view plaincopyprint?
01.private Gender gender;  
02.      
03.    @Enumerated(EnumType.STRING)/*字符串。*/ @Column(length=5,nullable=false)  
04.    public Gender getGender() {  
05.        return gender;  
06.    },3  


3,专门处理大文本和二进制数据的:

@Lob


--------------------------------------------------------------------------------------------------------------------------------------




4,延迟加载:@Basic存放大数据量,比如超过1M的话。

@Basic(fetch=FetchType.lazy)




作者: 混混@普宁.中国    时间: 2012-7-4 21:44:34

杰管,你又做 java 去了?
作者: 那个谁    时间: 2012-8-17 14:34:02

混混@普宁.中国 发表于 2012-7-4 21:44
杰管,你又做 java 去了?

从未离开过




欢迎光临 Scripts 学盟 (http://www.iscripts.org/) Powered by Discuz! X2