これは重複したリンクされた質問をすることは絶対にありません!JPA spring-bootで変更された列のみを保存する方法
私の問題は、JPAがすべてのフィールドを保存しようとしていることです。
エンティティ:
@Data // Auto getter and setters by lombok
@Entity
@IdClass(TkmstpId.class)
@Table(name="TKMSTP")
public class Tkmstp implements Serializable {
// DMD column: Tkslsk: decimal(2)
@Id
@Column(name="TKSLSK")
private Long slskNr;
// DMD column: Tkknnr: decimal(7)
@Id
@Column(name="TKKNNR")
private Long kundenr;
// DMD column: Tknr: decimal(7)
@Id
@Column(name="TKNR")
private Long tankNummer;
// DMD column: Tkstat: decimal(1)
@Column(name = "TKEVOL")
private Long estAarsForbrug;
@Column(name = "TKGDK")
private Long gKode;
@Column(name = "TKUDSSKY")
private String udskrivKortJn;
@Column(name="TKLV5DAT")
private java.sql.Date leveringsDato_tklv5dat;
// DMD column: Tkudssky: char(1)
}
取り扱い:生成
TkmstpId id = new TkmstpId();
id.setKundenr(Long.parseLong(customer.getAccountNumber()));
id.setSlskNr(1L);
id.setTankNummer(customer.getContainerId());
Tkmstp container = tkmstpRepository.getOne(id);
if (container != null) {
boolean changed = false;
if (container.getEstAarsForbrug() == null || container.getEstAarsForbrug() == 0L) {
changed = setContainerEstimatedValues(container, customer);
} else if (container.getGKode() != 5L && container.getGKode() != 6L) {
changed = setContainerEstimatedValues(container, customer);
}
if (changed) {
tkmstpRepository.save(container);
System.out.println("updated container info on: customer: " + id.getKundenr() + " and container: " + id.getTankNummer());
}
}
はSQL:
Hibernate: update tkmstp set tklv5dat=?, tkudssky=?, tkevol=?, tkgdk=? where tkknnr=? and tkslsk=? and tknr=?
SQL(tklv5datなし)
update tkmstp set tkudssky = ?, tkevol = ?, tkgdk =?ここで、tkknnr =?そしてtkslsk =?そしてtknr =
エラー:
ます。java.sql.SQLException:[SQL0407]列または変数TKLV5DATに許可されていないNULL値。すべて事前に
おかげで...
はJPAの設定Application.properties:
spring.jpa.database-platform=org.hibernate.dialect.DB2Dialect
spring.jpa.hibernate.ddl-auto = false spring.jpa.show-sql=true
spring.datasource.driver-class-name=com.ibm.as400.access.AS400JDBCDriver
更新前のTKLV5DATは何ですか?それはヌルであったか、値を含んでいましたか? – PaulNUK
@PaulNUKそれはnullですが、奇妙なことに私は知っていますが、これはJPAがこれまでに使用されていなかったためです。 –
これらのフィールドを更新することはありませんか?あるいは時にはそれらを更新したいのですか? –