2017-03-04 132 views
1

您好我目前花費大量的時間搞清楚爲什麼我的一個一個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 
} 

,這是ClassModel.java

@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是工作,但在我的分貝級領域還是空

這是更新方法提前傢伙

@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(); 
    } 

} 

感謝

+0

發佈完整更新方法 –

+0

嗨@VikramSingh –

+0

你有沒有試過我的回答? –

回答

0

這是因爲BookingModel實體不是關係的所有者。

,如果你嘗試過的

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

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

,而不是與

@OneToOne(mappedBy="classModel") 
@PrimaryKeyJoinColumn 
BookingModel bookingModel; 

,而不是

@OneToOne 
@PrimaryKeyJoinColumn 
BookingModel bookingModel; 

所以應該在這種情況下

工作,或者你也可以這樣做,應該沒有實體

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

變化問題的工作,因爲我認爲,是@PrimaryKeyJoinColumn。此註釋表示BookingModelClassModel應具有相同的主鍵。

例如,這應該工作(沒有一個update()聲明):

BookingModel booking = new BookingModel(); 
booking.setId("booking"); 
save(booking); 

ClassModel classModel = new ClassModel(); 
classModel.setId("booking"); 
save(classModel); 

BookingModel savedBooking = get(booking.getId()); 
savedBooking.getClassModel();// we will have a classModel here 

您正在使用@GeneratedValueid類型String。不知道哪個數據庫是有效的。通常使用整數類型@GeneratedValue,例如Long

update()方法中沒有rolback()