以下に2つのエンティティクラスがあります。子クラスには、一方向の@ManyToOne
マッピングがあります。単方向多対1結合列値の更新
PlantDetails:
@Entity
@Table(name = "PLANT_DETAILS", uniqueConstraints={ @UniqueConstraint(columnNames = {"PLANT"})})
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler", "ignoreUnknown = true"})
public class PlantDetails implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "PLANT_ID")
private Long plantId;
@Column(name = "PLANT")
private String plant;
@Column(name = "PLANT_DETAILS")
private String plant_Details;
@Column(name = "LOCATION")
private String location;
@JsonCreator
public PlantDetails( @JsonProperty("plantId") Long plantId,
@JsonProperty("plant") String plant,
@JsonProperty("plant_Details") String plant_Details,
@JsonProperty("location") String location)
{
this.plantId = plantId;
this.plant = plant;
this.plant_Details = plant_Details;
this.location = location;
}
LineDetails:
@Entity
@Table(name = "LINE_DETAILS", uniqueConstraints={ @UniqueConstraint(columnNames = { "PLANT", "LINE_NAME" })})
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler", "ignoreUnknown = true"})
public class LineDetails implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "LINE_ID")
private Long lineId;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="PLANT", referencedColumnName = "PLANT")
private PlantDetails plantDetails;
@Column(name = "LINE_NAME")
private String lineName;
@Column(name = "LINE_DESCRIPTION")
private String lineDescription;
@JsonCreator
public LineDetails(@JsonProperty("lineId") Long lineId,
@JsonProperty("lineName") String lineName,
@JsonProperty("lineDescription") String lineDescription) {
this.lineId = lineId;
this.lineName = lineName;
this.lineDescription = lineDescription;
}
私は基本的なCRUD操作を行うにしようとしています。次のコードは、子テーブルを更新します。setterを使用して列を更新できます。しかし、私は@jsoncreator
エンティティクラスのコンストラクタでそれを持っていないので@JoinColumn
フィールド "植物"を更新することができません。私はそのフィールドを更新することはできますか?
レコードを作成/挿入するときに、@jsoncreator
ではなく、plantdetailsエンティティID列からその値を取得して、@JoinColumn
フィールドを「プラント」に設定します。
@Override
public void updateLineDetails(LineDetails lineDetails) {
Session session = this.sessionFactory.getCurrentSession();
LineDetails existinglineDetails = (LineDetails) session.get(LineDetails.class,
lineDetails.getLineId());
existinglineDetails.setLineName(lineDetails.getLineName());
existinglineDetails.setLineDescription(lineDetails.getLineDescription());
session.update(existinglineDetails);
}
感謝を。新しいLineDetailsInfoクラスを使って、あるいは古いLineDetailsクラスを使って、他のCRUD操作を行う必要があります。 – user7620991
素晴らしいあなたを助けてくれてうれしいです。 –
ご迷惑をおかけして申し訳ありません。あなたは作成(永続)のために表示することができますか?私は 'LineDetailsの置き換えを把握することができませんでした' lineDetails =(LineDetails)session.get(LineDetails.class、 lineDetailsInfo.getLineId()); ' – user7620991