OneToOne用法举例
public class Book{
// 其他内容…
@OneToOne(optional=true,cascade=CascadeType.ALL)
public BookExtend bookExtend;
} JoinColumn
JoinColumn注释用于定义主类在数据库中对应的表通过什么字段和关系类的主键进行关联,这个注释是可选的,如果不提供该注释,Kodo在使用”对象名_ID”和关联表进行关联(简单情况下),比如演示场景中类Book的bookExtend没有使用JoinColumn注释进行声明,我们使用Kodo EJB提供的Mapping Tool工具生成表格的时候,Book类对应的表Book中将自动加入列bookExtend_ID,它的类型将和BookExtend对应表的主键字段id类型保持一致。
Kodo EJB:实现类和类之间的关联关系(3)
时间:2011-03-05 bea 肖菁
JoinColumn注释中有两个属性:name和referencedColumnName属性。
name
String类型。
它用于指定主类对应的表中和关系类的主键进行关联的字段的名称,比如上例中,我们不希望使用默认的bookExtend_ID字段名进行关联,我们可以在Book类中使用JoinColumn注释bookExtend属性,设置JoinColumn注释为自己想要的名字比如extendID或者其他。
referencedColumnName
String类型。
指定关联表中与主表形成关联关系的字段名。主要用于设置区别于主键字段的情况。比如BookExtend表中默认使用Id进行关联,但现在需要使用其他字段进行关联,我们就可以提供该属性。
JoinColumn用法举例
public class Book{
// 其他内容…
@OneToOne(optional=true,cascade=CascadeType.ALL)
@JoinColumn(name="extendID",referencedColumnName="ID")
public BookExtend bookExtend;
}
编写符合要求的持久化类
现在我们开始根据上面章节中介绍的内容编写符合模拟场景中要求的Book类和BookExtend类,下面是作者编写的两个类的全部代码,代码中加入了比较多的注释方便大家理解。
Book类 package org.vivianj.kodo.examples.beans;
import Javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
/**
* Book 用于表征系统中的书籍对象,他有三个属性
* id - 书籍编号,书籍编号将由MySQL数据库自动生成
* name - 书名
* bookExtend – 书的扩展信息,和BookExtend是一对一(OneToOne)关系
*/
/* Entity注释表示该类是持久化类,的name属性是该实体在查询中对应的唯一名称,默认是类名 */
@Entity(name = "Book")
/* Table注释的name属性指定该持久化类对应的数据表的名称,默认数据表名和类名保持一致,为了
* 增强代码的可移植性,建议大家在name属性中使用大写英文字母 */
/* Inheritance注释的strategy确定了持久化对象和数据表之间的关系,可选择项包括SINGLE_TABLE、JOINED和TABLE_PER_CLASS,我们这里采用JOINED
*/
/* TABLE_PER_CLASS : strategy 设置为该选项表示每个类使用一个表,也就是上面所说的第一种情况*/
/* SINGLE_TABLE : strategy 设置为该选项表示所有类及其子类共用一个表,也就是上面所说的第二种情况*/
/* JOINED : strategy 设置为该选项表示每个类使用子表保存子类比父类多出的属性,也就是上面所说的第三种情况*/
@Inheritance(strategy = InheritanceType.JOINED)
public class Book {
/* Id注释表示该字段是标识字段 */
@Id
/* GeneratedValue |