您的位置:首页 > 其它

JPA配置一对多双向并且外键中含联合主键

2013-03-06 15:19 330 查看
最近开发了个案子

关于一对多映射,并且多的一方主键为复合主键

完整code如下

1.主体类

@Entity
@Table(name="INFO_GRP")
public class InfoGrp extends GenericBean implements IDataObject{

private static final long serialVersionUID = 1918446199175160468L;

@Id
@Column(name = "grpId", unique=true, nullable = false, columnDefinition = "varchar(10)")
private String grpId;

@Column(name = "grpname",  nullable = true, columnDefinition = "varchar(75)")
private String grpName;

@Column(name = "creator", nullable = true, columnDefinition = "varchar(10)")
private String creator;

@Column(name = "createTime",nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;

@Column(name = "updater",  nullable = true, columnDefinition = "varchar(10)")
private String updater;

@Column(name = "updateTime",nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;

@Column(name = "deleted",  nullable = true, columnDefinition = "varchar(1)")
private String deleted;

@Column(name = "isApprove",  nullable = true, columnDefinition = "varchar(1)")
private String isApprove;

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="id.infoGrp")
private Set<InfoGrpPermission> infoGrpPermissions = new HashSet<InfoGrpPermission>();
}

关联的多的一方的对象如下:

@Entity
@Table(name="INFO_GRP_PERMISSION")
public class InfoGrpPermission extends GenericBean implements IDataObject{

private static final long serialVersionUID = 1918446199175160468L;

@EmbeddedId
private InfoGrpPermissionId id;

@Column(name = "creator",  nullable = true, columnDefinition = "varchar(10)")
private String creator;

@Column(name = "createTime",nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;

@Column(name = "updater", columnDefinition = "varchar(10)")
private String updater;

@Column(name = "updateTime",nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;

@Column(name = "deleted",  nullable = true, columnDefinition = "varchar(1)")
private String deleted;
}


复合主键编写如下:

@Embeddable
public class InfoGrpPermissionId implements Serializable{

private static final long serialVersionUID = 1918446199175160468L;
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "grpId",  nullable = false, columnDefinition = "varchar(10)")
private InfoGrp infoGrp;
@Column(name = "permission",  nullable = false, columnDefinition = "varchar(10)")
private String permission;}


其中的get和set方法均省略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: