2016-04-02 39 views
0

Veritabanımda 3 tablo var - Rezervasyon, Restoran ve RestaurantTable. Şu anda yeni bir rezervasyon oluşturmaya çalışıyorum ve masadan bir adım attığım adımlardan biri.org.hibernate.LazyInitializationException (İlkbahar/Hazırda Bekletme)

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

Bu benim Restoran sınıfıdır: Bu tablo eklemeye çalıştığınızda Ama aşağıdaki hata çıkageldi

@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 

Ben FetchType.EAGER için "masa" değişebilir, ama bu başka sorunlara neden olmaktadır . Benim RestaurantTable sınıfı:

@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. 

Benim 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"; 
} 

hatayı dosya .jsp içinde oluştu:

<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> 

Herhangi bir yardım takdir!

cevap

1

refactor ResturantTable ve tüm verileri

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

eklenti Resturant sınıfa

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

yılında getirme türü Bu sınıfa getirme türü ve initalize için bu satırda, bookingService sınıf yöntemi getBooking(id) ekleme, silme

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

booking hizmet yönteminiz getBooking(id) return object

+0

Cevabınız için teşekkür ederiz. Bunu yaptım ve hala aynı hatayı aldım. – charliekelly

+0

@charliekelly ı cevabımı düzenle –

+0

Teşekkür ederim, işe yaradı! – charliekelly

1

Temas modunda ilgili varlıkların yüklenmesi, oturumların açık ve geçerli olması koşuluyla, ilk kez erişildiklerinde varlıkların yükleneceği anlamına gelir.

Oturum kapatıldığında öğelere erişmek LazyInitializationException'u atar.

Oturum açıkken öğelere eriştiğinizden emin olun veya alma tipi modunu tembelden istekliye (varsayılan) değiştirin.

İlgili konular