当前位置: 首页 > 知识库问答 >
问题:

HiberNate-@OneToMore-com.sun.jdi.发生异常的调用方法

寇升
2023-03-14

我有一个问题与OneTo多关系。我正在使用sping-mvc和sping-Security和Hibernate4。

我正在为所有人使用注释。

我的问题是在实体战争中,当我看到属性列表玩家调试时,我看到玩家= PersistentBag,当我单击它时,com.sun.jdi.InvocationException发生了调用方法。

我也得到了这个例外:

org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: clanwar.model.War.players, could not initialize proxy - no Session

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: clanwar.model.War.players, could not initialize proxy - no Session

实体:

@Entity
@Table(name = "WARS")
public class War implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID", nullable = false)
    private int id;

    @ManyToOne
    @JoinColumn(name = "CLAN")
    private Clan clan;

    @Column(name = "START_DATE")
    private Date startDate;

    @Column(name = "ENEMY_NAME")
    private String enemyName;

    @OneToMany(mappedBy = "war")
    private List<WarPlayer> players;

    @Transient
    private List<Enemy> enemies;

    public War() { }

    // Getters and setters.

}

-

@Entity
@Table(name = "WAR_PLAYERS")
public class WarPlayer implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @ManyToOne
    @JoinColumn(name = "WAR")
    private War war;

    @Id
    @ManyToOne
    @JoinColumn(name = "PLAYER")
    private Player player;

    @Column(name = "WAR_NUMBER")
    private int warNumber;

    @ManyToOne
    @JoinColumn(name = "OBJETIVE_1")
    private Attack objetive1;

    @ManyToOne
    @JoinColumn(name = "OBJETIVE_2")
    private Attack objetive2;

    @ManyToOne
    @JoinColumn(name = "RECOMMENDED_1")
    private Attack recommended1;

    @ManyToOne
    @JoinColumn(name = "RECOMMENDED_2")
    private Attack recommended2;

    @ManyToOne
    @JoinColumn(name = "FINAL_1")
    private Attack final1;

    @ManyToOne
    @JoinColumn(name = "FINAL_2")
    private Attack final2;
    private String comment;

    public WarPlayer() {}

    // Getters and setters

}

我的DAO

@Override
    public War findById(int id) throws DaoException {

        War war;

        try {
            war = (War) getSession()
                    .createQuery("from War where ID = :id")
                    .setParameter("id", id)
                    .uniqueResult();
        } catch (Exception e) {
            throw new DaoException(e.getMessage());
        }

        return war;
    }

共有3个答案

冀永寿
2023-03-14

替换我的道

@Override
public War findById(int id) throws DaoException {

    Transaction transaction = null;
    Session session = null;

    try {
        session = sessionFactory.openSession();
        session.setFlushMode(FlushMode.COMMIT);
        transaction = session.beginTransaction();

        String hql = "from War where ID = :id";
        Query query = session.createQuery(hql);

                query.setParameter("id", id).uniqueResult();

    } catch (Exception e) {
        throw new DaoException(e.getMessage());
    }

    return war;
}
艾俊悟
2023-03-14

FetchType.EAGER 效率不高。您必须包含 org.hibernate.annotations.Fetch 注释。

所以:

@Fetch(FetchMode.SUBSELECT)
@OneToMany(mappedBy = "war", fetch = FetchType.LAZY)
private List<WarPlayer> players;
公孙芷阳
2023-03-14

Hibernate文档 说:

在正常情况下,订单关联将由Hibernate延迟加载

因此,您需要使用急切抓取:

 @OneToMany(mappedBy = "war",fetch = FetchType.EAGER)
 private List<WarPlayer> players;
 类似资料:
  • 问题内容: 我有在Android上运行良好的代码。当我将其移植到具有JRE 1.6的Windows 64位计算机上时,该代码不起作用。 当我运行以下代码行时: 我得到以下异常: java.security.NoSuchAlgorithmException:SHA256 MessageDigest在java.security.MessageDigest.getInstance(未知源)处的java.

  • 我是Spring的新手。我正在使用SpringWebMVC开发RESTAPI。对于错误处理,我得到了这个链接http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann rest spring mvc异常 我曾尝试在我的项目中使用ResponseEntityExceptionHand

  • 问题内容: 当我的程序尝试从数据库中按名称加载用户时,如何解决Hibernate 偶尔引发的异常的原因? 我将表中的列错误地映射到类而不是其他某种整数类型吗?请注意,同一应用程序将其他表中的列映射到对象,但是当用来自这些表的行填充对象时,Hibernate 不会 引发此异常。 进一步注意到,该方案使 RMI缓存复制 的 唯一用户缓存 。此异常可能与缓存复制有关吗?它是Ehcache还是Hibern

  • TestController使用一个TestService,它有一个Spring@async asyncComp.getGood(s)方法。当输入字符串不是“good”时,会引发异常。TestController将获得异常,在其余响应中,状态500内部服务器错误。我找不到我项目的确切代码,但找到了一些关于使用CompletableFuture的想法。在答案区域,我发布了我写的作为测试应用程序的内容

  • 我想问一下这种行为的原因,因为在运行Spring方法/类时,我似乎不完全理解Hibernate中的和之间的区别。 下面的代码应该回滚DB操作,但它没有回滚(整个类注释为): 以下代码在引发异常时按预期回滚: save()方法来自类,因此它的代码是: 该实体是一个已存在的实体,因此我理解它正在执行。根据JPA规范: find方法(前提是在没有锁的情况下调用它或使用LockModeType.None调