- 質問概要
Spring Boot を使用して、リレーション関係にあるテーブルに対して、親子同時にInsert処理を実施したいのですができません。
1テーブルずつINSERTして最後にCommitするしかないのでしょうか?
PostgreSQLのテーブルにマッピングしたPOJOクラスをRepositoryを使用してコミットしたいのですが、
その方法をご教示ください。
- 該当のソースコード
・リレーションの親に相当するPOJOクラス
Java
1package ***; 2 3import java.util.List; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.Id; 8import javax.persistence.JoinColumn; 9import javax.persistence.OneToMany; 10import javax.persistence.Table; 11 12@Entity 13@Table(name = "users") 14public class User { 15 16 @Id 17 @Column(name = "uid") 18 private String uId; 19 20 @Column(name = "photo_url") 21 private String photoUrl; 22 23 @OneToMany 24 @JoinColumn(name = "uid", nullable = true) 25 private List<UserLicense> licenses; 26 27 // Getter / Setter は記載を省略
・リレーションの子に相当するPOJOクラス
Java
1package ***; 2 3import javax.persistence.Column; 4import javax.persistence.Entity; 5import javax.persistence.Id; 6import javax.persistence.Table; 7 8@Entity 9@Table(name = "user_licenses") 10public class UserLicnse { 11 12 @Id 13 @Column(name = "license_id") 14 private int licenseId; 15 16 @Column(name = "uid") 17 private String uId; 18 19 @Column(name = "authenticated") 20 private boolean authenticated; 21 22 // Getter / Setter は記載を省略
・Repositoryクラス
Java
1package ***; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.stereotype.Repository; 5 6import ***; 7 8@Repository 9public interface UserRepository extends JpaRepository<User, Long>{ 10}
・Repository呼出クラス
Java
1package ***; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.http.MediaType; 5import org.springframework.web.bind.annotation.RequestBody; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8import org.springframework.web.bind.annotation.RestController; 9 10import ***.bean.User; 11import ***.repository.UserRepository; 12 13@RestController 14public class UsersControl { 15 16 @Autowired 17 UserRepository userRepository; 18 19 @RequestMapping(value="/v1/user", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE) 20 public void postUserInfo(@RequestBody User user) { 21 22 // ここでエラーが発生する 23 userRepository.save(user); 24 25 } 26}
・発生しているエラー
ERROR
1org.postgresql.util.PSQLException: ERROR: 列licenses0_.user_uidは存在しません 2 ポジション: 324 3 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433) ~[postgresql-42.2.2.jar:42.2.2] 4 at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178) ~[postgresql-42.2.2.jar:42.2.2] 5 at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:306) ~[postgresql-42.2.2.jar:42.2.2] 6 at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.2.jar:42.2.2] 7 at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) ~[postgresql-42.2.2.jar:42.2.2] 8 at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155) ~[postgresql-42.2.2.jar:42.2.2]
・テーブル構造
Postgres
1/* ユーザーテーブル */ 2CREATE TABLE users ( 3 uid VARCHAR NOT NULL -- ユーザーID 4 , photo_url VARCHAR -- 写真URL 5 , PRIMARY KEY (uid) 6); 7/* ユーザーテーブル */ 8CREATE TABLE user_licenses ( 9 license_id SERIAL NOT NULL -- ライセンスID 10 , uid VARCHAR NOT NULL -- ユーザーID 11 , authenticated BOOLEAN -- 認証済み 12 , PRIMARY KEY (license_id) 13 , FOREIGN KEY (uid) REFERENCES users(uid) 14);
大変基礎的なことで申し訳ございませんが、
ご教示よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー