Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 春季冬眠jpa多对多_Spring_Hibernate_Jpa_Many To Many - Fatal编程技术网

Spring 春季冬眠jpa多对多

Spring 春季冬眠jpa多对多,spring,hibernate,jpa,many-to-many,Spring,Hibernate,Jpa,Many To Many,我试着让病人在我的服务中找一位这样的医生。 起初我给医生加了一些宠物。然后,当我尝试获取宠物列表时,它将被返回,但之后记录将从doctor_宠物加入表中删除,下次结果将是一个空列表 @RequestMapping(value = ["/{id}/patients"], method = [RequestMethod.GET], produces = ["application/json"]) @ResponseStatus(HttpStatus.OK) fun getPatients(@Path

我试着让病人在我的服务中找一位这样的医生。 起初我给医生加了一些宠物。然后,当我尝试获取宠物列表时,它将被返回,但之后记录将从doctor_宠物加入表中删除,下次结果将是一个空列表

@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)
@RequestMapping(value=[“/{id}/patients”],method=[RequestMethod.GET],products=[“application/json”])
@ResponseStatus(HttpStatus.OK)
有趣的getPatients(@PathVariable(“id”)id:Long):ResponseEntity=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."
}
@实体
类博士:可序列化{
@身份证
@生成值
变量id:Long=0
lateinit变量名称:String
@多个(级联=[CascadeType.ALL])
@JoinTable(name=“医生\宠物”
,joinColumns=[JoinColumn(name=“doctor\u id”)]
,inverseJoinColumns=[JoinColumn(name=“pet_id”)])
var pets=mutableListOf()
}
宠物看起来像这样

@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."
}
@实体
等级宠物{
@身份证
@生成值
变量id:Long=0
lateinit变量名称:String
var yearOfBorn:Int=0
@许多(mappedBy=“宠物”)
var=mutableListOf()
override fun toString():String=“$name出生于$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)
}
//从DoctorDaoImpl为医生获取宠物
覆盖有趣的getPets(id:Long):列表{
val doctor=entityManager.find(doctor::class.java,id)
归还宠物医生
}
@存储库
@交易的
开放类DoctorServiceImpl@Autowired构造函数(@Qualifier(“doctorDao”)val doctorDao:doctorDao):DoctorService{
医生(医生:医生){
医生道。保存医生(医生)
}
覆盖有趣的updateDoctor(医生:医生){
doctorDao.updateDoctor(医生)
}
@事务(只读=真)
覆盖findDoctor(id:Long):医生=doctorDao.findDoctor(id)
覆盖有趣的getPets(id:Long):List=doctorDao.getPets(id)
}
我错了什么

更新

在我从医生那里得到宠物之后

休眠:从doctor_宠物中删除,其中doctor_id=

整个日志都是

休眠:选择doctor0\u0.id作为id0\u0\u0,选择doctor0\u0.name作为name0\u0_ 来自Doctor doctor0,其中doctor0.id=?休眠:选择 pets0.doctor\u id为doctor1\u 0\u 1,pets0.pet\u id为pet2\u 4\u 1,pet1\u.id 作为id1_0_,pet1_.name作为name1_0_,pet1_.yearOfBorn作为yearOfBorn1_0_ 从doctor_pet pets0_uu内部加入pets0上的pet pet1_uu.pet_uid=pet1_u.id 其中pets0.doctor\u id=?休眠:从doctor_宠物中删除 医生id=?休眠:选择doctors0.pet\u id作为pet2\u 1\u 1\u, Doctor0.DoctorID为doctor1.4.1,doctor1.id为id0.0, 医生1。姓名0\u 0\u来自医生\u宠物医生0\u内部加入医生 doctor1在Doctor0.doctor\u id=doctor1\u.id,其中Doctor0.pet\u id=


也许您的服务类中缺少@Transactional?参见+Ryan Dawson,我设置并声明了transactionManager。我所有的服务都是事务性的。如果我将链接宠物添加到医生,我可以在MySql Workbrencs中看到它是成功的,并且在我第一次为医生查询宠物时,宠物被列出,但我可以在Workbrencs中看到,在查询完成后,联接表是空的。我对Spring/Hibernate/Jpa非常陌生。我一整天都在试着解决这个问题。为什么joinable会在从医生那里得到宠物清单后被清除,但我不能。我要分享我的比特桶回购协议。