I'm using Hibernate 3.6.10.Final and I'm on Java 1.6.
Structure:
@Entity
class Test
{
@Id
private String id;
@OneToOne(mappedBy = "test")
private Test_Team test_team;
}
@Entity
class Test_Team
{
@Id
private long id;
@OneToOne
@JoinColumn(name = "TEST_ID", referencedColumnName = "ID", insertable = false, updatable = false)
private Test test;
@OneToOne
@JoinColumn(name="TEAM_ID", referencedColumnName="ID", insertable=false, updatable=false)
private Team team;
}
class Team
{
@Id
private long id;
@OneToOne(mappedBy="team")
private Test_Team test_team;
}
SQL generated by Hibernate:
SELECT *
FROM (SELECT test0_.id
FROM test test0_ )
WHERE rownum <= 1 // LIMIT 1
SELECT test_team0_.id,
test_team0_.team_id,
test_team0_.test_id,
team1_.id,
test2_.id,
FROM test_team test_team0_
LEFT OUTER JOIN team team1_
ON test_team0.team_id = team1_.id
LEFT OUTER JOIN test test2_
ON test_team0_.test_id = test2_.id
WHERE test_team_.test_id = ?
SELECT test_team0_.id,
test_team0.team_id,
test_team0.test_id,
team1_.id,
test2_.id,
FROM test_team test_team0_
LEFT OUTER JOIN team team1_
ON test_team0_.team_id = team1_.id
LEFT OUTER JOIN test test2_
ON test_team0_.test_id = test2_.id
WHERE test_team0_.team_id = ?
When I do a select on TEST
Hibernate does N queries on TEST_TEAM
and TEAM
.
How can I avoid this or how can I reduce the amount of queries? However all data is required on load time.