Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java 休眠更新一个单向_Java_Spring_Hibernate_Jpa_Orm - Fatal编程技术网

Java 休眠更新一个单向

Java 休眠更新一个单向,java,spring,hibernate,jpa,orm,Java,Spring,Hibernate,Jpa,Orm,嗨,我现在花了很多时间来弄清楚为什么我的one hibernate映射没有更新,你们能帮我吗 顺便说一下,我对冬眠还不熟悉 这是BookingModel.java的 @Entity @Table(name="booking") public class BookingModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") String id; @ManyToOne @JoinColu

嗨,我现在花了很多时间来弄清楚为什么我的one hibernate映射没有更新,你们能帮我吗

顺便说一下,我对冬眠还不熟悉

这是BookingModel.java的

@Entity
@Table(name="booking")
public class BookingModel {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
String id;

@ManyToOne
@JoinColumn(name="teacher", nullable=false)
@JsonManagedReference
TeacherModel teacher;

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;

@Column(name="start")
Date start;

@Column(name="end")
Date end;

@Column(name="title")
String title;


//getters and setters
}
@Entity
@Table(name="class")
public class ClassModel {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private String id;

@ManyToOne
@JoinColumn(name="student")
private StudentModel student;

@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;

//getters and setters
}
这是ClassModel.java

@Entity
@Table(name="booking")
public class BookingModel {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
String id;

@ManyToOne
@JoinColumn(name="teacher", nullable=false)
@JsonManagedReference
TeacherModel teacher;

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;

@Column(name="start")
Date start;

@Column(name="end")
Date end;

@Column(name="title")
String title;


//getters and setters
}
@Entity
@Table(name="class")
public class ClassModel {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private String id;

@ManyToOne
@JoinColumn(name="student")
private StudentModel student;

@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;

//getters and setters
}
这就是我想要实现的方法

    BookingModel booking = find(scheduleId);
    ClassModel classModel = classDao.getClass(classId);
    classModel.setBookingModel(booking);
    booking.setClassModel(classModel);
    booking.setTitle("TEST");
    update(booking);
setTitle正在工作,但my db中的class字段仍然为空

这是更新方法

@Transactional
@Override
public void bookClass(String classId, String scheduleId) {
org.springframework.security.core.userdetails.User user =          (org.springframework.security.core.userdetails.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

    BookingModel booking = find(scheduleId);
    ClassModel classModel = classDao.getClass(classId);
    classModel.setBookingModel(booking);
    booking.setClassModel(classModel);
    booking.setTitle("TEST");
    update(booking);
}


@Override
public void update(E entity) {
    try{
        Transaction t = currentSession().beginTransaction();
         currentSession().update(entity);
         t.commit();
    }catch(Exception e){
        e.printStackTrace();
    }

}

提前感谢各位

这是因为BookingModel实体不是关系的所有者

如果你试过

@OneToOne(cascade=CascadeType.ALL)
ClassModel classModel;
而不是

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;

而不是

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
所以在这种情况下它应该是有效的

或者你也可以这样做,它应该在实体中不改变的情况下工作

BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
booking.setTitle("TEST");
update(booking);
classModel.setBokingModel(booking);
update(classModel);

这是因为BookingModel实体不是关系的所有者

如果你试过

@OneToOne(cascade=CascadeType.ALL)
ClassModel classModel;
而不是

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;

而不是

@OneToOne(mappedBy="bookingModel", cascade=CascadeType.ALL)
ClassModel classModel;
@OneToOne
@PrimaryKeyJoinColumn
BookingModel bookingModel;
所以在这种情况下它应该是有效的

或者你也可以这样做,它应该在实体中不改变的情况下工作

BookingModel booking = find(scheduleId);
ClassModel classModel = classDao.getClass(classId);
booking.setTitle("TEST");
update(booking);
classModel.setBokingModel(booking);
update(classModel);

我认为问题在于
@PrimaryKeyJoinColumn
。此注释意味着
BookingModel
ClassModel
应该具有相同的主键

例如,这应该有效(没有
update()
语句):

您正在使用
@GeneratedValue
id
类型为
String
。不知道这对哪个数据库有效。通常整数类型与
@GeneratedValue
一起使用,例如
Long


您的
update()
方法中没有
rolback()

我认为问题在于
@PrimaryKeyJoinColumn
。此注释意味着
BookingModel
ClassModel
应该具有相同的主键

例如,这应该有效(没有
update()
语句):

您正在使用
@GeneratedValue
id
类型为
String
。不知道这对哪个数据库有效。通常整数类型与
@GeneratedValue
一起使用,例如
Long


在你的
update()
方法中没有
rolback()

post complete update methodhi@vikramsingh你试过我的答案吗?@hi@mibrahim.iti,在我的代码中,我只在类模型中插入一个BookingModel@RyanDelaCruz但是您只更新BookingModel,而不更新ClassModel(关系的所有者)我认为这是你的问题,你能添加这个更新(classModel);更新您的代码(预订);告诉我发生了什么?因此,您将更新两个实体,而不仅仅是一个实体,请告诉我在这种情况下会发生什么,谢谢:)post complete update methodhi@Vikramsinghh您是否尝试过我的答案??hi@mibrahim.iti,在我的代码中,我只在类模型中插入一个BookingModel@RyanDelaCruz但是您只更新BookingModel,而不更新ClassModel(关系的所有者)我认为这是你的问题,你能添加这个更新(classModel);更新您的代码(预订);告诉我发生了什么?因此,您将更新两个实体,而不仅仅是一个,请告诉我在这种情况下会发生什么,谢谢:)