春季休眠jpa多对多

时间:2018-08-20 11:57:01

标签: spring hibernate jpa many-to-many

在我的服务中,我尝试向患者求医。 首先,我向医生添加了一些宠物。然后,当我尝试获取宠物列表时,将返回该列表,但是从Doctor_pet连接表中删除记录之后,下一次结果将为空列表。

@RequestMapping(value = ["/{id}/patients"], method = [RequestMethod.GET], produces = ["application/json"])
@ResponseStatus(HttpStatus.OK)
fun getPatients(@PathVariable("id") id: Long): ResponseEntity<List<Pet>> = ResponseEntity(doctorService.getPets(id), HttpStatus.OK)

医生课看起来像这样

@Entity
class Doctor: Serializable {

    @Id
    @GeneratedValue
    var id: Long = 0

    lateinit var name: String
    @ManyToMany(cascade = [CascadeType.ALL])
    @JoinTable(name = "doctor_pet"
            , joinColumns = [JoinColumn(name = "doctor_id")]
            , inverseJoinColumns = [JoinColumn(name = "pet_id")])
    var pets = mutableListOf<Pet>()
}

宠物看起来像这样

@Entity
class Pet {

    @Id
    @GeneratedValue
    var id: Long = 0
    lateinit var name: String
    var yearOfBorn: Int = 0

    @ManyToMany(mappedBy = "pets")
    var doctors = mutableListOf<Doctor>()

    override fun toString(): String = "$name was born in $yearOfBorn."
}

我从DoctorDao存储库中获得了这样的宠物清单。

// Get pets for doctor from DoctorDaoImpl
override fun getPets(id: Long): List<Pet> {
    val doctor = entityManager.find(Doctor::class.java, id)
    return doctor.pets
}

@Repository
@Transactional
open class DoctorServiceImpl @Autowired constructor(@Qualifier("doctorDao") val doctorDao: DoctorDao) : DoctorService {

    override fun saveDoctor(doctor: Doctor) {
        doctorDao.saveDoctor(doctor)
    }

    override fun updateDoctor(doctor: Doctor) {
        doctorDao.updateDoctor(doctor)
    }

    @Transactional(readOnly = true)
    override fun findDoctor(id: Long): Doctor = doctorDao.findDoctor(id)

    override fun getPets(id: Long): List<Pet> = doctorDao.getPets(id)
}

我怎么了?

更新

我从Dr.Dao医生那里领养宠物

  

休眠:从doctor_pet删除,其中doctor_id =?

整个日志是

  

休眠:选择doctor0_.id作为id0_0_,选择doctor0_.name作为名称0_0_   来自Doctor0_医生,其中doctor0_.id =?休眠:选择   pets0_.doctor_id为Doctor1_0_1_,pets0_.pet_id为pet2_4_1_,pet1_.id   作为id1_0_,pet1_.name作为name1_0_,pet1_.yearOfBorn作为yearOfBorn1_0_   来自doctor_pet pets0_内部,在pets0_.pet_id = pet1_.id上加入Pet pet1_   其中pets0_.doctor_id =?休眠:从doctor_pet删除,其中   doctor_id =?休眠:选择Doctors0_.pet_id作为pet2_1_1_,   doctors0_.doctor_id为doctor1_4_1_,Doctor1_.id为id0_0_,   来自doctor_pet doctors0_内部的doctor1_.name为name0_0_内部加入Doctor   Doctors0_.doctor_id = doctor1_.id上的doctor1_,其中doctors0_.pet_id =?

0 个答案:

没有答案