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

本文介绍了一种使用Java与JPA实现一对多关系及复合主键的方法。通过示例展示了如何定义实体类、复合主键类以及设置关联关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发了个案子

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

完整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方法均省略。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值