私はいくつかのデータを保存するロジックを持っており、私はスプリングブート+スプリングデータjpaを使用します。Spring JPAは、コンポジットプライマリキーが期待通りに機能しない別個のエンティティを保存し、同じエンティティを更新します。
今、私は1つのオブジェクトを保存しなければならず、瞬時に別のオブジェクトを保存する必要があります。 オブジェクトの主キーのプロパティは3つあります。 - partCode、setCode、itemCode。
SetItem関数(partCode = 10から001、SETCODE = 04、itemCode = 01から0021、数量= 1.0、sortNo = 2、項目= NULL:
は以下戻っ)さんが、第1の目的は(のtoStringを持っているとしましょう)
及び第二の目的は、以下の戻りのtoStringを有する:
SetItem関数(partCode = 10から001、SETCODE = 04、itemCode = 01から0031、数量= 1.0、sortNo = 2、アイテム= NULL )
itemCodeの値に違いがあり、itemCodeプロパティが主キーに属しているため、2つのオブジェクトが互いに異なります。
私の場合、プログラムを実行すると、webappは最初のオブジェクトを保存し、最初のオブジェクトを2番目のオブジェクト値で更新し、オブジェクトを別に保存しません。
(画像の上に、この記事の質問とは別の値が含まれています)
ここでは私のエンティティの情報は次のとおりです。
/**
* The persistent class for the set_item database table.
*
*/
@Data
@DynamicInsert
@DynamicUpdate
@Entity
@ToString(includeFieldNames=true)
@Table(name="set_item")
@IdClass(SetGroupId.class)
public class SetItem extends BasicJpaModel<SetItemId> {
private static final long serialVersionUID = 1L;
@Id
@Column(name="PART_CODE")
private String partCode;
@Id
@Column(name="SET_CODE")
private String setCode;
@Id
@Column(name="ITEM_CODE")
private String itemCode;
private Double qty;
@Column(name="SORT_NO")
private int sortNo;
@Override
public SetItemId getId() {
if(BooleanUtils.ifNull(partCode, setCode, itemCode)){
return null;
}
return SetItemId.of(partCode, setCode, itemCode);
}
@ManyToMany(fetch=FetchType.LAZY)
@JoinColumns(value = {
@JoinColumn(name="PART_CODE", referencedColumnName="PART_CODE", insertable=false, updatable=false)
, @JoinColumn(name="ITEM_CODE", referencedColumnName="ITEM_CODE", insertable=false, updatable=false)
})
private List<Item> item;
}
そこで問題は、私が個別にオブジェクトを保存しますか、 ですオブジェクトの複合主キーは部分的に同じです。
EDIT: エンティティクラスの下に延びている。
@Setter
@Getter
@MappedSuperclass
@DynamicInsert
@DynamicUpdate
public abstract class BasicJpaModel<PK extends Serializable> implements Persistable<PK>, Serializable {
@Override
@JsonIgnore
public boolean isNew() {
return null == getId();
}
}
EDIT再び:埋め込みクラス。 Soneoneが埋め込み可能なクラスを指摘した後、私はただ2つのプロパティしかないことに気付きました。それは3つでなければなりません。ありがとうございました。
@Data
@NoArgsConstructor
@RequiredArgsConstructor(staticName="of")
@Embeddable
public class SetGroupId implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@NonNull
private String partCode;
@NonNull
private String setCode;
}
ありがとうございます。私は埋め込み可能なクラスを見た。 3つではなく2つのプロパティだけが存在します。私はこれを変えて何が起こるかを見ます。本当にありがとう。 – PLAYMAKER