2017-03-04 2 views
1

Hallo Ich verbringe derzeit viel Zeit herauszufinden, warum mein One-One Hibernate Mapping nicht aktualisiert wird können Sie mir helfen.Hibernate Aktualisierung eines One-One unidirektionalen

von der Art, wie ich überwintern in neu bin

Dies ist der 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 
} 

und dies ist der 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 
} 

und diese die Methode, die ich versuche zu erreichen

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

die setTitle funktionieren, aber die Klasse Feld in meiner db ist immer noch null

das ist die Update-Methode

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

} 

Vielen Dank im Voraus Jungs

+0

Post vollständige Update-Methode –

+0

Hallo @ VikramSingh –

+0

haben Sie meine Antwort versucht ?? –

Antwort

0

Das ist wegen BookingModel Einheit ist nicht der Besitzer der Beziehung.

wenn Sie

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

statt

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

mit

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

statt

versucht
@OneToOne 
@PrimaryKeyJoinColumn 
BookingModel bookingModel; 

so

in diesem Fall arbeiten oder diese können Sie auch tun, es sollte und es sollte

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

Das Problem in Einheiten ohne Änderung arbeiten, wie ich denke, @PrimaryKeyJoinColumn ist. Diese Anmerkung bedeutet, dass BookingModel und ClassModel denselben Primärschlüssel haben sollten.

Zum Beispiel sollte diese Arbeit (es gibt keine update() Anweisung):

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 

Sie verwenden @GeneratedValue mit id Typ wie String. Ich weiß nicht, für welche Datenbank dies gilt. Normalerweise werden ganzzahlige Typen mit @GeneratedValue verwendet, zum Beispiel .

Es gibt keine rolback() in Ihrer update() Methode.

Verwandte Themen