Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在GWT RPC中使用util.List_Java_Hibernate_Jpa_Gwt Rpc - Fatal编程技术网

Java 如何在GWT RPC中使用util.List

Java 如何在GWT RPC中使用util.List,java,hibernate,jpa,gwt-rpc,Java,Hibernate,Jpa,Gwt Rpc,我有这样的情况: 类用户 Warriordo类 WarriorServiceImpl中的方法 @Transactional(readOnly=true) 公共列表getAllWarriors(){ List=null; List warsDto=new ArrayList(); 试一试{ wars=genericDao.getAll(Warrior.class); if(wars!=null){ 为(战士战争:战争){ add(createWarriorDto(war)); } } }捕获

我有这样的情况:

类用户 Warriordo类 WarriorServiceImpl中的方法
@Transactional(readOnly=true)
公共列表getAllWarriors(){
List=null;
List warsDto=new ArrayList();
试一试{
wars=genericDao.getAll(Warrior.class);
if(wars!=null){
为(战士战争:战争){
add(createWarriorDto(war));
}   
}
}捕获(例外e){}
返回Warsdo;
}
DAO中的方法
@SuppressWarnings(“未选中”)
@凌驾
公共列表getAll(类clazz){
返回getEntityManager().createQuery(
从“+clazz.getSimpleName()+“e”中选择e”
.getResultList();
}
applicationContext.xml

完整代码

如果我想调用
WarriorService.Util.getInstance().getAllWarriors(
new AsyncCallback()
在小部件中,它将失败,并显示以下消息:com.google.gwt.user.client.rpc.StatusCodeException:500服务器上的调用失败;有关详细信息,请参阅服务器日志。 在Jetty中只有以下消息:[错误]500-POST/game/warrior(127.0.0.1)57字节

没有更多错误消息。 序列化(util.List)有问题吗?你有什么想法吗? 多谢各位

编辑: 这是终端中的错误消息(抱歉,我没有看到):


错误LazyInitializationException-未能延迟初始化角色集合:cz.sutak.game.client.bo.User.warriors,未关闭任何会话或会话

问题是,在客户端,Hibernate无法获取您标记为
fetch=FetchType.LAZY
的属性。您需要在在通过导线传递对象图之前,服务器端会对Hibernate代理进行空值设置

请参阅另一个线程中有关取消Hibernate代理的提示


干杯,

正如您所说,这里与
GWT
无关,因为它的服务器端代码。即使在客户端,GWT也支持
Util.List

说到原始问题,这是一行
wars=genericDao.getAll(Warrior.class);


当访问此行时,没有打开
hibernate会话。

EAGER是有帮助的…但我仍然有消息com.google.gwt.user.client.rpc.StatusCodeException:500服务器上的呼叫失败;有关详细信息,请参阅服务器日志。Jetty中只有以下消息:[ERROR]500-POST/game/warrior(127.0.0.1)57字节恐怕您必须在服务器中设置断点和/或从那里回调并调试。在您自己的代码中没有NPE的情况下,我猜图形中的某些对象是不可序列化的(hibernate代理不是)这会给GWT序列化程序类带来麻烦。请尝试我链接到的方法,或者使用例如来映射域对象。请查看我的代码好吗?我完全不懂。我使用的是Spring ORM。这是我的applicationContext.xml:添加TopStatus代码500意味着,在处理您请求的RPC时,服务器端发生了一些错误您可以在错误日志中获得完整的stacktrace,这是调用
WarriorService.Util.getInstance().getAllWarriors(新的AsyncCallback()之后的日志
。我不知道为什么它不起作用。我的测试还可以。但在rpc调用中,dont functionOk..可能是我现在想的一个servlet路径..它触发了你的方法吗?我不知道trigerring确切的意思是什么。但唯一一个处理查询的方法是在这个问题的顶部。
@Entity
@Configurable(preConstruction=true)
public class User extends AbstractBussinessObject implements Serializable {
    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
    private List<Warrior> warriors;
...
public class UserDto extends AbstractDto implements Serializable{
    private List<WarriorDto> warriors;
    private String name;
    private String password;

    public UserDto() {}

    public UserDto(Long id, List<WarriorDto> warriors, String name, String password) {
        this.warriors = warriors;
        ...
@Entity
public class Warrior extends AbstractBussinessObject implements Serializable{
    @JoinColumn(name = "user_id")
    @ManyToOne
    private User user;
    ...
public class WarriorDto extends AbstractDto implements Serializable{
    private User user;
    ...
@Transactional(readOnly = true)
public List<WarriorDto> getAllWarriors() {
    List<Warrior> wars = null;
    List<WarriorDto> warsDto = new ArrayList<WarriorDto>();
    try {
        wars = genericDao.getAll(Warrior.class);
        if (wars != null) {
            for (Warrior war : wars) {
                warsDto.add(createWarriorDto(war));
            }   
        }
    } catch (Exception e) {}
    return warsDto;
}
@SuppressWarnings("unchecked")
@Override
public <ENTITY> List<ENTITY> getAll(Class<ENTITY> clazz) {
    return getEntityManager().createQuery(
    "SELECT e FROM " + clazz.getSimpleName() + " e")
    .getResultList();
}
<!-- Connection pool -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="initialSize" value="2" />
        <property name="minIdle" value="2" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="databasePlatform" value="${jpa.platform}" />
                <property name="generateDdl" value="true" />
                <property name="showSql" value="true" />
            </bean>
        </property>
        <property name="packagesToScan" value="cz.sutak.game" />
    </bean>

    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!-- Podpora deklarativni demarkace transakci - anotace @Transactional -->
    <tx:annotation-driven transaction-manager="txManager" mode="aspectj" />

    <bean id="transactionTemplate"
        class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager">
            <ref bean="txManager" />
        </property>
    </bean>