我正在開發 Spring Data JPA Postgres 示例。在這個例子中,我建立了 Student 和 StudentMember 之間的關系。Student.java@Builder@Data@AllArgsConstructor@NoArgsConstructor@Entity@Table(uniqueConstraints = { @UniqueConstraint(name="student_name_key",columnNames = {"studentName"})})public class Student{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "studentId") private Long studentId; @Column(name = "studentName", nullable = false) private String studentName; @OneToMany(mappedBy = "student", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<StudentMember> studentMembers;}StudentMember.java@Builder@Data@AllArgsConstructor@NoArgsConstructor@Entity@Tablepublic class StudentMember { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long studentMemberId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="studentId", insertable=false, updatable=false, nullable = false,foreignKey=@ForeignKey(name = "fk_student_id")) private Student student;}MainApp.java@SpringBootApplicationpublic class MyProgramApplication implements CommandLineRunner { @Autowired ProgramMemberRepository memberRepository; @Autowired ProgramRepository programRepository; public static void main(String[] args) { SpringApplication.run(MyProgramApplication.class, args); } @Override public void run(String... args) throws Exception { Student student = Student.builder().studentName("John Doe").build(); programRepository.save(student); StudentMember programMember = StudentMember.builder() .student(student) .build(); if(Objects.nonNull(student.getStudentMembers())){ student.getStudentMembers().add(programMember); }
1 回答

交互式愛情
TA貢獻1712條經驗 獲得超3個贊
您Student在實體中的關系StudentMember是只讀的。
消除insertable=false, updatable=false
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="studentId", nullable = false,foreignKey=@ForeignKey(name = "fk_student_id"))
private Student student;
否則 Hibernate 不寫入外鍵。
另外我不確定你的映射是否正確。PostgreSQL 抱怨一個列被調用student_id但名稱@JoinColum是studentId
先檢查這個。
添加回答
舉報
0/150
提交
取消