【发布时间】:2021-05-23 18:05:33
【问题描述】:
当我保存实体时,子表中的外键是 为空
父类是由映射的子类slotdetails组成的Appointment 具有一对多的关系
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);
}
}
子类是 Slotdetails,与父 Appoinment 有多对一的关系
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`)
当我在子表中的 appoinment_id 为空时 调用appoinmentRepository.save,在父表中一切正常
请帮忙
【问题讨论】:
标签: java spring-boot jpa persistence hibernate-mapping