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

来源:互联网 发布:excel数据统计分析教程 编辑:程序博客网 时间:2024/06/06 19:56

最近开发了个案子

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

完整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;@EmbeddedIdprivate 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;}


复合主键编写如下:

@Embeddablepublic 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方法均省略。