2016-04-02 9 views
0

Ich habe 3 Tabellen in meiner Datenbank - Booking, Restaurant und RestaurantTable. Im Moment versuche ich eine neue Buchung zu erstellen, und eine der nächsten Schritte ist das Hinzufügen einer Tabelle. Aber wenn ich versuche, diese Tabelle hinzuzufügen, wird folgende Fehler aufkommt:org.hibernate.LazyInitializationException (Spring/Hibernate)

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role 

Das ist mein Restaurant-Klasse ist:

@Entity 
@Table(name="restaurant") 
public class Restaurant { 

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

    @Column(name="restaurant_name") 
    private String restaurantName; 

    @Column(name="address") 
    private String address; 

    @OneToMany(mappedBy = "restaurant") 
    private Set<RestaurantTable> table; 

    // Getters and setters 

Ich konnte „Tisch“ zu FetchType.EAGER ändern, aber das verursacht andere Probleme . Meine RestaurantTable Klasse:

@Entity 
@Table(name="restaurant_table") 
public class RestaurantTable { 

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

    @Column(name="table_size") 
    private Integer tableSize; 

    @Column(name="table_number") 
    private Integer tableNumber; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="restaurant_id") 
    private Restaurant restaurant; 

    // Getters and setters. 

Mein BookingController.java:

@RequestMapping(value = "booking/create/{id}", method = RequestMethod.GET) 
public String chooseTable(@PathVariable Long id, Model model) { 
    Booking booking = bookingService.getBooking(id); 
    Restaurant restaurant = booking.getRestaurant(); 
    Set<RestaurantTable> tableSet = restaurant.getTable(); 
    model.addAttribute("tables", tableSet); 
    model.addAttribute("booking", booking); 
    return "chooseTable"; 
} 

Die .jsp der Fehlerdatei aufgetreten in:

<body> 
<jsp:include page="../fragments/menu.jsp"/> 
<div id="body"> 
    <h2>Create new booking</h2> 

    <form:form method="POST" modelAttribute="booking" > 
     <table> 
      <tr> 
       <td>Choose a table*:</td> 
       <td><form:select path="tableNumber"> 
         <form:option value="" label="--- Select ---" /> 
         <form:options items="${tables}" itemValue="tableNumber" itemLabel="tableNumber"/> 
       </form:select> 
      </tr> 
      <tr> 
       <td colspan="3"><input type="submit" /></td> 
      </tr> 
     </table> 
    </form:form> 
    <div> 
     <a href="/bookings">Back to List</a> 
    </div> 
</div> 
<jsp:include page="../fragments/footer.jsp"/> 

</body> 

Jede Hilfe ist willkommen!

Antwort

1

refactor ResturantTable und löschen holen Typ in dieser Klasse

@ManyToOne   
    @JoinColumn(name="restaurant_id") 
    private Restaurant restaurant; 

Add holen Art in Resturant Klasse

@OneToMany(mappedBy = "restaurant",fetch = FetchType.LAZY) 
private Set<RestaurantTable> table; 

und fügen Sie diese Zeile Ihre bookingService Klassenmethode getBooking(id) für initialisieren alle Daten

booking.getRestaurant().getTable().size(); 

booking Rückgabewert

+0

Vielen Dank für Ihre Antwort. Ich habe das gemacht und bekomme immer noch den gleichen Fehler. – charliekelly

+0

@charliekelly ı Bearbeiten Sie meine Antwort –

+0

Vielen Dank, es hat funktioniert! – charliekelly

1

Das Laden der zugehörigen Entitäten im Lazy-Modus bedeutet, dass die Entitäten beim ersten Zugriff geladen werden, vorausgesetzt, dass die Sitzung geöffnet und gültig ist.

Der Zugriff auf die Elemente beim Schließen der Sitzung löst eine LazyInitializationException aus.

Stellen Sie sicher, dass Sie auf die Elemente zugreifen, wenn die Sitzung geöffnet ist, oder ändern Sie den Abrufmodus von "Lazy" auf "Eager" (Standard).

Verwandte Themen