Hibernate OneToMany java.lang.StackOverflowError [英] Hibernate OneToMany java.lang.StackOverflowError

查看:124
本文介绍了Hibernate OneToMany java.lang.StackOverflowError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我在堆栈中的第一个问题,所以请温和:D



我试图创建hibernate OneToMany关系。当我尝试从我的数据库中获取一些数据时,我得到了StackOverflowError。但是,当我删除OneToMany部分,一切正常。这是我的REST服务的一部分,现在它运行在VMware vFabric Server和MySQL DB上。



提取示例:

  @Inject 
private EntityManager entityManager;
...
entityManager.find(League.class,1);
...
entityManager.find(Team.class,1);

MySQL脚本:



<$ (
id int(11)NOT NULL AUTO_INCREMENT,
name varchar(20)COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY(id)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

CREATE TABLE team(
team_id int(11)NOT NULL AUTO_INCREMENT,
name varchar(20)COLLATE utf8_unicode_ci NOT NULL,
fk_leagueId int(11)NOT NULL ,
PRIMARY KEY(team_id),
FOREIGN KEY(fk_leagueId)REFERENCES league(id)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

课程:

 @XmlRootElement 
@Entity
@Table(name =team)
@Data
public class Team {
@Id
@GeneratedValue(generator =increment)
@GenericGenerator(name =increment,strategy =increment)
@Column(name =team_id)
private int id;
@Column(name =name)
私人字符串名称;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name =fk_leagueId,nullable = false)
私人联赛联赛;

$ b $ x @RootElement
@Entity
@Table(name =league)
@Data
public class League {
@Id
@GeneratedValue(generator =increment)
@GenericGenerator(name =increment,strategy =increment)
@Column(name =id)
private int id;
@Column(name =name)
私人字符串名称;
//如果我在下面注释2行,没有错误,并且一切都正常工作
@OneToMany(fetch = FetchType.LAZY,mappedBy =league)
private Set< span> << /跨度>团队及GT;团队;

错误:

 休眠:选择league0_.id作为id1_1_0_,league0_.name作为name2_1_0_来自联盟league0_,其中league0_.id =? 
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
休眠:选择teams0_.fk_leagueId为fk3_1_1_,teams0_.team_id为team1_4_1_,teams0_.team_id为team1_4_0_,teams0_.fk_leagueId为fk3_4_0_,teams0_.name作为name2_4_0_从团队teams0_其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
休眠:选择teams0_.fk_leagueId为fk3_1_1_,teams0_.team_id为team1_4_1_,teams0_.team_id为team1_4_0_,teams0_.fk_leagueId为fk3_4_0_,teams0_.name作为name2_4_0_从团队teams0_其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
Hibernate:选择teams0_.fk_leagueId作为fk3_1_1_,teams0_.team_id作为team1_4_1_,teams0_.team_id作为team1_4_0_,teams0_.fk_leagueId作为fk3_4_0_,teams0_.name作为name2_4_0_来自team teams0_,其中teams0_.fk_leagueId =?
在线程tomcat-http-3中的异常java.lang.StackOverflowError
在org.jboss.logging.JDKLogger.translate(JDKLogger.java:73)
在org.jboss。 logging.JDKLogger.isEnabled(JDKLogger.java:85)
at org.jboss.logging.JDKLogger.doLog(JDKLogger.java:41)
at org.jboss.logging.Logger.debug(Logger。
at org.hibernate.internal.CoreMessageLogger_ $ logger.debug(CoreMessageLogger_ $ logger.java:525)
at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger。 java:104)
at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:95)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement( StatementPreparerImpl.java:180)在org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159

在org.hibernate.loader.Loader.prepareQueryStatement(Loader.java: 1858)
在org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1835)
在org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815)
在org.hibernate.loader.Loader .doQuery(Loader.java:899)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311 )
at org.hibernate.loader.Loader.loadCollection(Loader.java:2234)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:65)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:674)
处org.hibernate作为org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
。 internal.SessionImpl.initializeCollection(SessionImpl.java:1849)
在org.hibernate.collection.internal.Abst ractPersistentCollection $ 4.doWork(AbstractPersistentCollection.java:549)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:234)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize (AbstractPersistentCollection.java:545)在org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
在org.hibernate.collection.internal.PersistentSet.hashCode
(PersistentSet.java :428)
at com.lukaszb.motspe.webapp.model.League.hashCode(League.java:21)
at com.lukaszb.motspe.webapp.model.Team.hashCode(Team.java :20)在java.util.HashMap.hash处
(HashMap.java:351)在java.util.HashMap.put处
(HashMap.java:471)$ java.util中的
。 HashSet.add(HashSet.java:217)
...

编辑:



由于@Thihara和@KarIP,我可以解决这个问题。我已经为Team和League重写了toString(),如下所示:

  @Override 
public String toString(){
returnLeague [id =+ id +,name =+ name +];

$ b @Override
public String toString(){
returnTeam [id =+ id +,name =+ name +] ;
}

,并且能够根据需要从数据库中获取数据。但是在解析时,我得到了无限循环的JAXB错误。所以我用 @XmlAccessorType(XmlAccessType.FIELD)注释了Team和League类,所以它不会看方法,Team league 字段作为 @XmlTransient ,所以它不会被解析。



这里我甚至可以删除我的toString()实现,它仍然有效。
我不完全确定为什么。
问题已解决,但我希望听到更精确的解释。我不知道JAXB为什么会停止数据读取,即使是在整个数据库通信过程之后(或者不是?)。
更具体地说,我使用的是Jersey:

  @GET 
@Path( search / id)
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public List< League> searchById(@QueryParam(id)int id){
返回Arrays.asList(leagueDAO.getById(id));
}


解决方案

一个StackOverFlow是当你的团队的联盟被递归访问....



团队联盟到团队联盟



我猜想有一些函数试图将你的对象反射地或者递归地转换成其他表示,导致无限循环。


It's my first question here on stack, so please be gentle :D

I'm trying to create hibernate OneToMany relationship. When I try to fetch some data from my DB, I'm getting StackOverflowError. But when i remove OneToMany part, everything goes normally. This is part of my REST Service, for now it runs on VMware vFabric Server and MySQL DB.

Fetch example:

@Inject
private EntityManager entityManager;
...
entityManager.find(League.class, 1);
...
entityManager.find(Team.class, 1);

MySQL script:

CREATE TABLE league (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(20) COLLATE utf8_unicode_ci NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE team (
    team_id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(20) COLLATE utf8_unicode_ci NOT NULL,
    fk_leagueId int(11) NOT NULL,
    PRIMARY KEY (team_id),
    FOREIGN KEY (fk_leagueId) REFERENCES league(id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Classes:

@XmlRootElement
@Entity
@Table(name = "team")
@Data
public class Team {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "team_id")
    private int id;
    @Column(name = "name")
    private String name;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_leagueId", nullable = false)
    private League league;
}

@XmlRootElement
@Entity
@Table(name = "league")
@Data
public class League {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "id")
    private int id;
    @Column(name = "name")
    private String name;
    //if I comment 2 lines below, there is no error, and everything works fine
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "league")
    private Set<span><</span>Team> teams;
}

Error:

Hibernate: select league0_.id as id1_1_0_, league0_.name as name2_1_0_ from league league0_ where league0_.id=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Hibernate: select teams0_.fk_leagueId as fk3_1_1_, teams0_.team_id as team1_4_1_, teams0_.team_id as team1_4_0_, teams0_.fk_leagueId as fk3_4_0_, teams0_.name as name2_4_0_ from team teams0_ where teams0_.fk_leagueId=?
Exception in thread "tomcat-http--3" java.lang.StackOverflowError
    at org.jboss.logging.JDKLogger.translate(JDKLogger.java:73)
    at org.jboss.logging.JDKLogger.isEnabled(JDKLogger.java:85)
    at org.jboss.logging.JDKLogger.doLog(JDKLogger.java:41)
    at org.jboss.logging.Logger.debug(Logger.java:406)
    at org.hibernate.internal.CoreMessageLogger_$logger.debug(CoreMessageLogger_$logger.java:525)
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:104)
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:95)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:180)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1858)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1835)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815)
    at org.hibernate.loader.Loader.doQuery(Loader.java:899)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2234)
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:65)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:674)
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1849)
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:549)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:234)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
    at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:428)
    at com.lukaszb.motspe.webapp.model.League.hashCode(League.java:21)
    at com.lukaszb.motspe.webapp.model.Team.hashCode(Team.java:20)
    at java.util.HashMap.hash(HashMap.java:351)
    at java.util.HashMap.put(HashMap.java:471)
    at java.util.HashSet.add(HashSet.java:217)
...

Edit:

I was able to solve this out thanks to @Thihara and @KarIP. I have overriden toString() for Team and League like this:

@Override
public String toString() {
    return "League [id=" + id + ", name=" + name + "]";
}

@Override
public String toString() {
    return "Team [id=" + id + ", name=" + name + "]";
}

and was able to fetch data from DB as wanted. But then while parsing I got JAXB error with infinite cycles. So i annotated Team and League class with @XmlAccessorType(XmlAccessType.FIELD), so it won't look at methods, and Team league field as @XmlTransient, so it won't be parsed.

Here I can even remove my toString() implementations, and it still works. I'm not completely sure why. Problem is solved, but I would like to hear more precise explanation. I don't know why JAXB stopped data fetch, even if it's after whole DB communication process(or isn't?). To be more specific, I'm using Jersey for that:

@GET
@Path("search/id")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<League> searchById(@QueryParam("id") int id) {
return Arrays.asList(leagueDAO.getById(id));
}

解决方案

The only way it can throw an StackOverFlow is when your Team's League is accessed recursively....

Team to League to Team to League

I'm guessing there's some function trying to convert your objects into some other representation reflectively or recursively resulting in an infinite loop.

这篇关于Hibernate OneToMany java.lang.StackOverflowError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆