http://www.blogjava.net/zJun/archive/2007/01/24/95747.html

@transient 忽略该方法

一、

@Entity:通过@Entity注解将一个类声明为一个实体bean

@Table(name=”t_Husband”):通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名)

二、

@Id:用于标记属性的主键

@GeneratedValue(默认取值anto,ID生成策略)

三、

@Column(name=”wifeid”):表示持久化属性所映射表中的字段,如果属性名与表中的字段名相同,则可以省略

四、联合主键

  当entity class使用复合主键时,需要定义一个类作为id class。id class必须符合以下要求:类必须声明为public,并提供一个声明为public的空构造函数。必须实现Serializable接,覆写 equals()和hashCode()方法。entity class的所有id field在id class都要定义,且类型一样。

在类名上@Entity@IdClass(TeacherPK.class)

在联合主键的两个属性上分别@Id@Id

public class EmployeePK implements java.io.Serializable{
      
String empName;
      
Integer empAge;
       public
EmployeePK(){}
       public
boolean equals(Object obj){ ......}
      
public int hashCode(){......}
   
}

@IdClass(EmployeePK.class)
   
@Entity
   
public class Employee {
       
@Id String empName;
       
@Id Integer empAge;
   
}

五、关联关系(在getter方法上加入以下Annotation)

1、1 to 1

(1)单向外键:

Husband中:

private Wife wife;

@OneToOne

@JoinColumn(name="wifeid")-->设置Husband表中的对应字段名,可以省略,默认字段名为类名_主键名

(2)双向外键:

Husband中:

private Wife wife;

@OneToOne

@JoinColumn(name="wifeid")-->设置Husband表中的对应字段名,可以省略,默认字段名为类名_主键名

Wife中:

private Husband husband;

@OneToOne(mappedBy="wife")-->wife为Husband类中的属性

(3)联合主键:(wife类中的id和name作为联合主键)

Husband中:

private Wife wife;

@OneToOne

@JoinColumns({     -->设置Husband表中的对应字段名,可以省略,默认字段名为类名_主键名

        @JoinColumn(name="wifeid", referencedColumnName="id"),

     @JoinColumn(name="wifename", referencedColumnName="name")

        })

(4)组件映射:(Wife作为Husband的一部分,两个类一张表)

Husband中:

private Wife wife;

@Embedded

@Column-->可略

Wife中:

不需要@Entity@Id

2、1 to N , N to 1

设计:在“多”方加入外键,而不是在“一”方加入外键。下面三种方式生成的表是一样的。

(1)多对一单向

User中:

private Group group;

@ManyToOne

@JoinColumn-->可略

(2)一对多单向(在多方的表中加入外键)

Group中:

private User<Set> users = new HashSet<User>();

@OneToMany

@JoinColumn(name="groupid")-->避免产生中间表

(3)双向(应用少)

User中:

private Group group;

@ManyToOne

@JoinColumn-->可略

Group中:

private User<Set> users = new HashSet<User>();

@OneToMany(mappedBy="group")-->User类中的group属性

3、N to N

设计:加入中间表。下面两种方式生成的表一样。

(1)单向

Teacher中:

private Set<Student> students = new HashSet<Student>();

@ManyToMany

@JoinTable(          -->修改中间表名及字段名

      name=”teacher_student”,

     joinColumns=@JoinColumn(name="t_ID", referencedColumnName="id"),

      inverseJoinColumns=@JoinColumn(name="s_ID", referencedColumnName="id")

      )

(2)双向(应用少)

Teacher中同上;

Student中:

private Set<Teacher> teachers = new HashSet<Teacher>();

@ManyToMany(mappedBy="students")

4、在@OneToOne@OneToMany@ManyToOne@ManyToMany后面的括号中可以加入两个属性:

cascade=CascadeType.ALL-->增删改数据时

fetch=FetchType.LAZY/EARGER-->读数据时

六、

@JoinColumn

如果在entity class的field上定义了关系(one2one或one2many等),我们通过JoinColumn来定义关系的属性。

name:列名。

referencedColumnName:该列指向列的列名(建表时该列作为外键列指向关系另一端的指定列)

unique: 是否唯一

nullable: 是否允许为空

insertable: 是否允许插入

updatable: 是否允许更新

columnDefinition: 定义建表时创建此列的DDL

secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。

下面的代码说明Husband和Wife是一对一关系。在Husband对应的映射表建一个名为wifeid的列,该列作为外键指向Wife对应表中的主键id。

public class Husband{

private
Wife wife;

@OneToOne

@JoinColumn(name="wifeid")

public
Wife getWife () {

return
wife;

}

7、

@JoinColumns

如果在entity class的field上定义了关系(one2one或one2many等),并且关系存在多个JoinColumn,用JoinColumns定义多个JoinColumn的属性。

元数据属性说明:

value: 定义JoinColumn数组,指定每个JoinColumn的属性。

下面的代码说明Husband和Wife是一对一关系。在Husband对应的映射表建两列,一个名为wifeid的列,该列作为外键指向Wife对应表中的主键id;另一个为wifename的列,该列作为外键指向Wife对应表中的主键name。

public class Husband{

private
Wife wife;

@OneToOne

@JoinColumns({

@JoinColumn(name="wifeid",
referencedColumnName="id"),

@JoinColumn(name="wifename",
referencedColumnName="name")

})

public
Wife getWife () {

return
wife;

}

8、

@JoinTable

JoinTable在many-to-many关系的所有者一边定义。如果没有定义JoinTable,使用JoinTable的默认值。

元数据属性说明:

  • name:这个join table的名字。
  • joinColumns:定义指向所有者主表的外键列,数据类型是JoinColumn数组。
  • inverseJoinColumns:定义指向非所有者主表的外键列,数据类型是JoinColumn数组。

下面的teacher类代码定义了一个连接表teacher和student的join table。join table的表名是teacher_student,包含两个外键,一个外键是t_ID,指向表teacher的主键ID,另一个外键是s_ID,指向表student的主键ID。其中referencedColumnName可以省略。

public class Teacher{

 private Set<Student> students = new HashSer<Student>();

 @ManyToMany

@JoinTable(

name=”teacher_student”,

joinColumns=@JoinColumn(name="t_ID",
referencedColumnName="id"),

inverseJoinColumns=@JoinColumn(name="s_ID",
referencedColumnName="id")

)

  public  Set<Student> getStudents(){

    return students;

  }

JPA的常用Annotation的更多相关文章

  1. jpa基于按annotation的hibernate主键生成策略

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hib ...

  2. 3、JPA一些常用的注解

    常用注解有下面这些: ①:@Entity.@Table.@Id.@GeneratedValue.@Column.@Basic ②:@Transient 用于忽略某个属性,而不对该属性进行持久化操作 ③ ...

  3. JPA之常用 基本注解

    1.常用基本注解 @Entity @Table @Basic @Column @GeneratedValue @Id 2.特殊注解 @Transient @Temporal 用 table 来生成主键 ...

  4. Spring Data JPA 中常用注解

    一.java对象与数据库字段转化 1.@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 2.@Table:设置实体类在数据库所对应的表名 3.@Id:标识类里所在变量为主 ...

  5. 17 Spring Data JPA的常用接口分析

    思考 在客户的案例中,我们发现在自定义的CustomerDao中,并没有提供任何方法就可以使用其中的很多方法,那么这些方法究竟是怎么来的呢?答案很简单,对于我们自定义的Dao接口,由于继承了JpaRe ...

  6. Spring常用annotation标签

    @Service @Scope @Transactional @Autowired @Qualifier @PostConstruct @PreDestroy

  7. Hibernate常用Annotation标签说明

    @ javax.persistence.Entity 实体类定义,该标签表示当前类是一个Hibernate的数据库实体,对应着数据库中的某个表 位置:用于类级别 参数:无 样例:@Entity 注意: ...

  8. JPA常用注解

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.        JPA由EJB 3.0软件专家 ...

  9. JPA常用注解(转载)

    转自:http://blog.csdn.net/wanghuan203/article/details/8698102 JPA全称Java Persistence API.JPA通过JDK 5.0注解 ...

随机推荐

  1. 【VS开发】【电子电路技术】PCI与PCIE主板插卡与插槽识别

    一.PCI PCI接口分为32bit和64bit两种,32bit就是一般台式机使用的普通的pci接口(图一.图三),64bit接口比32bit接口长一些一般只出现在服务器上(图四.图五).32bit和 ...

  2. win10任务切换变卡

    问题:更新之前没有任何问题,用alt+tab是秒切,更新后切换任务后会黑屏一两秒然后才转到切换页面 解决方法:关闭服务“system interface foundation service”

  3. DDOS常见攻击类型和防御措施

    DDOS 攻击类型: SYN Flood 攻击 ACK Flood 攻击 UDP Flood 攻击 ICMP Flood 攻击 Connection Flood 攻击 HTTP Get 攻击 UDP ...

  4. 2018.08.10【省赛&提高A组模拟】比赛总结

    题解 这次题目可真是太难了! 糟糕的运气使我AK的步伐寸步难行(士气严重下降). T1 这题还是比较水的(尽管我比赛时只拿了50分) 一些大佬们说:这题只是一道简单的暴力题,枚举l+二分r 就可以了. ...

  5. 从入门到自闭之Python编码

    ascii码: 支持英文,数字,符号 1字节 不支持中文 gbk(国标) 支持英文,数字,符号 1字节 支持中文 2字节 unicode(万国码): 支持英文,数字,符号 4字节 支持欧洲 4字节 支 ...

  6. python网络爬虫(9)构建基础爬虫思路

    目的意义 基础爬虫分5个模块,使用多个文件相互配合,实现一个相对完善的数据爬取方案,便于以后更完善的爬虫做准备. 这里目的是爬取200条百度百科信息,并生成一个html文件,存储爬取的站点,词条,解释 ...

  7. tomcat进行压测时,cpu占用90%

    1.top 命令查看占用cpu高的进程,pid=15019 2.查看该进程下所有占用cppu高的线程 top -Hp pid   即:top -Hp 15019 得到pid 3.获取15030的16进 ...

  8. IDEA + SpringBoot + maven 项目文件说明

    Springboot + maven + IDEA + git 项目文件介绍 1..gitignore  分布式版本控制系统git的配置文件,意思为忽略提交 在 .gitingore 文件中,遵循相应 ...

  9. Django 使用request获取浏览器发送的参数(Django编程-5)

    1.url:需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P url(r'^index/(?P& ...

  10. NLP 基于kashgari和BERT实现中文命名实体识别(NER)

    准备工作,先准备 python 环境,下载 BERT 语言模型 Python 3.6 环境 需要安装kashgari Backend pypi version desc TensorFlow 2.x ...