![](/img/trans.png)
[英]Spring Data Jpa one to many relationship. Not able to insert child records: foreign key is coming as NULL
[英]foreign key coming as null in springboot jpa one to many
當我保存實體時,子表中的外鍵是 null
父 class 是由子 class slotdetails 映射到一對多關系的約會
package com.inskade.inkflow.appoinments;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@Entity()
@Table(name = "appoinment_detail")
public class Appointment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@CreationTimestamp
@Column(name = "created_at", insertable = true, updatable = false)
private Date createdAt;
@UpdateTimestamp
private Date updatedAt;
private String userId;
private LocalDate appointmentDate;
@OneToMany(
mappedBy = "appoinment",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<SlotDetails> slotDetails = new ArrayList<>();
public void addSlots(SlotDetails slot) {
slotDetails.add(slot);
slot.setAppoinment(this);
}
public void removeSlot(SlotDetails slot) {
slotDetails.remove(slot);
slot.setAppoinment(null);
}
}
子 class 是與父約會具有多對一關系的 Slotdetails
import java.sql.Time;
import java.util.UUID;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
@Entity
public class SlotDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long slotId;
@ManyToOne(fetch = FetchType.LAZY)
private Appoinment appoinment;
private Time appointmentStartTime;
private Time appointmentEndTime;
private String bookingStatus
private String bookedClientId;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SlotDetails )) return false;
return slotId != null && slotId.equals(((SlotDetails) o).getSlotId());
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
存儲庫
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface AppoinmentsRepository extends JpaRepository<Appoinment, Long> {
List<Appoinment> findAllByAppointmentDateBetween(LocalDate startDate, LocalDate endDate);
}
孩子的表格信息顯示
FOREIGN KEY (`appoinment_id`) REFERENCES `appoinment_detail` (`id`)
當我調用 appoinmentRepository.save 時,子表中的 appoinment_id 以 null 的形式出現,在父表中一切都很好
請幫忙
您尚未在SlotDetails
中指定@JoinColumn進行appointment
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="appoinment_id", nullable = false)
private Appoinment appoinment;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.