最近开发了个案子
关于一对多映射,并且多的一方主键为复合主键
完整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方法均省略。