JPA
を使用しており、Entity
のいずれかにEmbeddedId
を使用しています。埋め込みIDを格納する新しい主キーIDを取得するために強制的に実行する
の表は、のように怒鳴るです:ロールテーブル用
Role:
+-----------------------------+
| roleId | name | discription |
+-----------------------------+
Rights:
+-----------------------------+
| rightId | name | discription|
+-----------------------------+
rightrole
+--------------------------------------+
| roleId | rightId | some other column |
+--------------------------------------+
エンティティは次のとおりです。rightroleテーブルの
@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;
.......
}
エンティティは次のとおりです。
@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のテーブルを持っていますので、これを変更するには既存のアプリケーションで多くのコード変更が必要です。 –
あなたが実際に単純化してそれを単純化することができれば、ちょうど良い提案です:rightRoleテーブルのIdのほかに追加の列なしでmanyToMany関係の@joinTableアノテーションを使用してください。 これは、2つのオブジェクトを作成して権利の権利リストを作成し、ロールを維持しながらこの問題を簡単にするでしょう – Zeromus