gpt4 book ai didi

java - 如何在 GWT RPC 中使用 util.List

转载 作者:行者123 更新时间:2023-12-01 14:42:33 25 4
gpt4 key购买 nike

我有这样的情况:

用户类

@Entity
@Configurable(preConstruction=true)
public class User extends AbstractBussinessObject implements Serializable {
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Warrior> warriors;
...

UserDto 类

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

战士Dto类

public class WarriorDto extends AbstractDto implements Serializable{
private User user;
...

WarriorServiceImpl 中的方法

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

DAO 中的方法

@SuppressWarnings("unchecked")
@Override
public <ENTITY> List<ENTITY> getAll(Class<ENTITY> clazz) {
return getEntityManager().createQuery(
"SELECT e FROM " + clazz.getSimpleName() + " e")
.getResultList();
}

applicationContext.xml

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

完整代码

https://github.com/sutakjakub/game

如果我想打电话 WarriorService.Util.getInstance().getAllWarriors(
new AsyncCallback<List<WarriorDto>>()
在小部件中,它将失败并显示以下消息: com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server;有关详细信息,请参阅服务器日志。在 Jetty 中只有这条消息:[ERROR] 500 - POST/game/warrior (127.0.0.1) 57 bytes

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

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

错误 LazyInitializationException - 未能延迟初始化角色集合:cz.sutak.game.client.bo.User.warriors,没有 session 或 session 已关闭

最佳答案

问题在于,在客户端 Hibernate 无法获取您用 fetch = FetchType.LAZY 标记的属性。您要么需要在服务器端急切地获取它们,要么在通过网络传递对象图之前将 Hibernate 代理清空。

参见my answer在另一个线程中了解有关清空 Hibernate 代理的提示。

干杯,

关于java - 如何在 GWT RPC 中使用 util.List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com