2013-12-03 5 views
1

Лояльное свойство Entity всегда возвращает null значение в TomEE, но работает в Glassfish 3, как ожидалось. Есть ли какой-нибудь слушатель, которого я не вижу, чтобы включить его в web.xml или что-то еще? Как получить ленивое имущество?Lazy loading в TomEE не работает должным образом

Вот исходный код:

AppGroup.java:

package uz.mf.javaee6app; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class AppGroup implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 

    public Long getId() { return id; } 

    public void setId(Long id) { this.id = id; } 

    public String getName() { return name; } 

    public void setName(String name) { this.name = name; } 
} 

AppUser.java: пакет uz.mf.javaee6app;

import java.io.Serializable; 
import java.util.List; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

/** 
* 
* @author ravshan 
*/ 
@Entity 
public class AppUser implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 
    private List<AppGroup> roles; 

    public Long getId() { return id; } 

    public void setId(Long id) { this.id = id; } 

    public String getName() { return name; } 

    public void setName(String name) { this.name = name; } 

    public List<AppGroup> getRoles() { return roles; } 

    public void setRoles(List<AppGroup> roles) { this.roles = roles; } 
} 

я пропущу AppUserFacade лица без фасоли и UserManager CDI боб, нет ничего особенного. и последний users.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     Selected user: #{userManager.selectedUser.name} 
     <h:dataTable value="#{userManager.selectedUser.roles}" var="role"> 
      <h:column>#{role.name}</h:column> 
     </h:dataTable> 
    </h:body> 
</html> 

UserManager.java: пакет uz.mf.javaee6app;

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
import javax.inject.Named; 

@Named 
@SessionScoped 
public class UserManager implements Serializable { 

    private AppUser selectedUser; 

    public AppUser getSelectedUser() { 
     return selectedUser; 
    } 

    public void setSelectedUser(AppUser selectedUser) { 
     this.selectedUser = selectedUser; 
    } 

} 

Выбранный пользователь устанавливается другим видом.

+0

без вашего исходного кода, это безнадежно правильно ответить на ваш вопрос. – kostja

+0

Я думаю, что кто-то, кто использовал glassfish/eclipselink и tomee/openjpa на практике, может понять проблему даже без кода. –

+0

Можно ли также увидеть userManager? – Rick

ответ

0

Я бы поставил на то, что проблема заключается в том, что каким-то образом ваша сущность становится отсоединенной до доступа к ленивому загруженному полю. Обязательно проверьте свои атрибуты транзакций, чтобы убедиться, что ваш контекст все еще активен, когда вы пытаетесь работать с ленивой загрузкой.

+0

Да, я читал об этом, но интересно то, что я пытаюсь использовать его в glassfish3/eclipselink, и он работает так, как ожидалось, но он не работает в tomee. –

Смежные вопросы