Ich war süchtig nach Spring Data JDBC, das ich irgendwie überprüfte, also machte ich mir eine Notiz. (Der Base Spring Boot ist etwas alt, aber ...)
Ich habe gerade versucht, ein Objekt mit Spring Data JDBC in eine Tabelle einzufügen
Anscheinend gibt Spring Data JDBC SQL aus, wenn das Feld mit @ID ein Objekttyp ist, Einfügen, wenn es null ist, und Aktualisieren, wenn es nicht null ist. Dies bedeutet, dass die PK der Tabelle automatisch generiert werden muss.
Referenz https://stackoverflow.com/questions/50371775/why-does-spring-data-jdbc-not-save-my-car-object
Objekt
Users.java
public class Users {
@Id
private Integer user_id;
private String password;
private String notes;
Bedienung
SampleService.java
@Transactional
@Service
public class SampleService {
@Autowired
private UserRepository dao;
//Abkürzung
//Es ist ein sehr grober Code ...
public void add(Integer id) {
LocalDateTime time = LocalDateTime.now();
Users user = new Users(id, "password", time.toString());
logger.info(user.toString());
Users inserted = dao.save(user);
}
Zur Testausführung
SampleServiceTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleServiceTest {
@Autowired
private SampleService service;
//Aktualisieren Sie, wenn Sie dies ausführen
@Test
public void test1() {
service.add(3);
}
//Wenn Sie dies ausführen, fügen Sie ein
@Test
public void test2() {
service.add(null);
}
}
Wenn test1 () ausgeführt wird
2019-11-19 18:41:47.275 INFO 37316 --- [ main] org.example.test.service.SampleService : userid: 3, note: 2019-11-19T18:41:47.274
Postgre SQL-Trace zu diesem Zeitpunkt
2019-11-19 09:41:47.326 UTC [167] LOG: execute <unnamed>: BEGIN
2019-11-19 09:41:47.334 UTC [167] LOG: execute <unnamed>: UPDATE users SET user_id = $1, password = $2, notes = $3 WHERE user_id = $4
2019-11-19 09:41:47.334 UTC [167] DETAIL: parameters: $1 = '3', $2 = 'password', $3 = '2019-11-19T18:41:47.274', $4 = '3'
Wenn test2 () ausgeführt wird
2019-11-19 18:41:47.355 INFO 37316 --- [ main] org.example.test.service.SampleService : userid: null, note: 2019-11-19T18:41:47.355
Postgre SQL-Trace zu diesem Zeitpunkt
2019-11-19 09:41:47.368 UTC [167] LOG: execute <unnamed>: BEGIN
2019-11-19 09:41:47.368 UTC [167] LOG: execute <unnamed>: INSERT INTO users (password, notes) VALUES ($1, $2)
RETURNING *
2019-11-19 09:41:47.368 UTC [167] DETAIL: parameters: $1 = 'password', $2 = '2019-11-19T18:41:47.355'
Lassen Sie uns vorerst die DDL ändern und die Version von Spring Boot erhöhen. Mit Postgres 10 können Sie es automatisch generieren. https://qiita.com/nuko_yokohama/items/7d0d5525bcefaa3332ce
Oh, ich habe hier auf die SQL-Trace-Einstellungen von PostgreSQL verwiesen. https://www.kakiro-web.com/postgresql/postgresql-sql-log-system.html
Recommended Posts