方式一
PromotionCouponConditionEntity 实体的主键关联 PromotionEntity的主键
@OneToOne(optional = false)
@PrimaryKeyJoinColumn
private PromotionEntity promotion;
双向关联的话在: PromotionEntity 的实体中
@OneToOne(optional = false)
@PrimaryKeyJoinColumn
private PromotionCouponConditionEntity promotion;
方式二
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY,optional = false)
@JoinColumn(name="id",referencedColumnName="memberId")
@JsonIgnore
private PointsEntity points;
public class PointsEntity extends BaseBusinessEntity {
public static final String TABLE_NAME = "ae_member_points";
private Long tid;
private Long orgId;
private Long memberId;
private Long lifeTimePoints;
private Long pointsBalance;
}
方式三
在person里面定义的注释代码
@OneToOne(cascade = CascadeTye.ALL,optional = true)
public IDCard getIdCard(){
return idCard;
}
在idcard里面定义的注释代码
@OneToOne(cascade = CascadeType.ALL,mappedBy = "idCard",optional = false)
public Person getPerson(){
return person;
}
/*
* @OneToOne注释指明Person 与IDCard为一对一关系,@OneToOne注释五个属性:fetch ,targetEntity、cascade、、optional 和mappedBy,
*
*fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER 和FetchType.LAZY。
*FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。
*targetEntity属性:Class类型的属性。定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
*cascade属性:CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,
*而且这种关系是递归调用的。cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、
*CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
*
optional = true设置idcard属性可以为null,也就是允讦没有身份证,未成年人就是没有身份证的。
*
*@OrderBy(value = “id ASC”)注释指明加载元组时按id的升序排序(降序 “DESC”)
*/
mappedBy:
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方;
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的;
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。