我们使用JPA
,并且我们在Entity
之一中使用EmbeddedId
。强制刷新以获取新的主键ID以存储EmbeddedId
表有波纹管:
Role:
+-----------------------------+
| roleId | name | discription |
+-----------------------------+
Rights:
+-----------------------------+
| rightId | name | discription|
+-----------------------------+
rightrole
+--------------------------------------+
| roleId | rightId | some other column |
+--------------------------------------+
实体的角色表是:
@Entity
@Table(name = "role")
public class Role {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(nullable = false)
private Long roleID;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role", fetch = FetchType.LAZY)
private List<RightRole> rightRoleList;
.......
}
实体rightrole表:
@Entity
@Table(name = "rightrole")
public class RightRole extends BaseEntity<RightRolePK> {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected RightRolePK rightRolePK;
@JoinColumn(name = "roleID", referencedColumnName = "roleID", insertable = false, updatable = false)
@ManyToOne(fetch = FetchType.LAZY)
private Role role;
@JoinColumn(name = "rightID", referencedColumnName = "rightID", insertable = false, updatable = false)
@ManyToOne(fetch = FetchType.LAZY)
private Right right;
......
}
@Embeddable
public class RightRolePK implements Serializable {
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@NotNull
@Column(nullable = false)
private long roleID;
@Basic(optional = false)
@NotNull
@Column(nullable = false)
private long rightID;
.....
}
我的问题是每当我要创建新的role
与rights
然后首先我必须store(persist)
role
对象,然后我必须做flush
以获得新生成的id
作用。然后我可以把它放在rightrole
实体的对象中。
有没有什么办法,我可以在角色对象中设置rightrole
列表,并一次性保存它。
这个冲洗套管我们的性能瓶颈因为对于批量插入我们必须坚持单个单一的对象。
我们正在使用Auto Generated
主键。
对角色使用不同的策略?像一个UUID。 RightRole有一个自动生成的ID,而不是你用混合身份识别这个黑客混乱? –
我们有大约35个表格,我们正在使用这种复合标识,因此改变这种方式需要在我们现有的应用程序中进行大量的代码更改。 –
只是一个建议,如果你实际上可以简化它:使用@joinTable注解来获得manyToMany关系,就像没有额外的列,除了右边的表中的Ids。 这将使这件事情容易,因为创建两个对象,加权利的作用rightList,坚持 – Zeromus