我使用hibernate-core:3.3.1.GA
爲什麼hibernate連接所有表,聲明這個特定的連接?
我有三個映射:
類PlayerAccount
:
@Entity
@Table(name = "player_account")
public class PlayerAccount {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@ManyToOne(targetEntity = Player.class, fetch = FetchType.EAGER)
@JoinColumn(name="player_id")
private Player player;
//GET, SET
}
類PlayerAchievements
:
@Entity
@Table(name="player_achievement")
public class PlayerAchievement {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@ManyToOne(targetEntity = Player.class, fetch = FetchType.EAGER)
@JoinColumn(name = "player_id")
private Player player;
//GET, SET
}
和類Player
@Entity
@Table(name = "player")
@Inheritance(strategy = InheritanceType.JOINED)
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "ps_id")
private String psId;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
//GET, SET
}
問題: 當我嘗試寫一個簡單的條件查詢類似如下:
Criteria criteria = getSession().createCriteria(PlayerAccount.class);
criteria.add(Restrictions.eq("playerId", playerId));
criteria.list();
生成的SQL查詢中包含joins
有以下幾種觀點:
SELECT
-- columns to select
FROM player_account this_
LEFT OUTER JOIN player player2_
ON this_.player_id=player2_.id
LEFT OUTER JOIN external_partner_player player2_1_
ON player2_.id=player2_1_.player_id
LEFT OUTER JOIN player_achievement achievemen3_
ON player2_.id=achievemen3_.player_id
WHERE player_id = 2362189
事情player_achievements可能包含多個具有相同player_id
值的行。由於我們在該條件查詢中可能有重複的結果。如何解決使用休眠而不寫入sql
- 查詢?
向我們顯示您的external_partner_player表。你想要獲取什麼,PlayerAccount及其所有關聯或只是PlayerAccount的屬性? – 2014-10-31 14:46:43