2011-02-23 44 views
0

我在做一行保存一對多對象時遇到問題。該外鍵不會填充到子對象中。他們不是想從Hibernate自動啓動嗎? BadgeID永遠不會被插入到BadgeLevel.BadgeID中。休眠,Oracle,序列和一對多問題

Badge.java

@Basic 
@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="BADGE_SEQUENCE") 
@SequenceGenerator(name="BADGE_SEQUENCE", sequenceName = "BADGE_SEQUENCE") 
@Column(name = "ID", nullable=false, unique=true) 
    public Long getId() { 
    return id; 
} 

@OneToMany(mappedBy="badge", fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
@Fetch(value=FetchMode.SELECT) 
public List<BadgeLevel> getBadgeLevels() { 
    return this.badgelevels; 
} 

BadgeLevel.java

@Basic 
@Id 
@NotNull 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="BADGELEVEL_SEQUENCE") 
@SequenceGenerator(name="BADGELEVEL_SEQUENCE", sequenceName = "BADGELEVEL_SEQUENCE") 
@Column(name = "ID", nullable=false, unique=true) 
    public Long getId() { 
    return id; 
} 

@ManyToOne() 
@JoinColumn(name = "BADGEID") 
public Badge getBadge() { 
    return this.badge; 
} 

/** 
* set badge 
*/ 
public void setBadge(Badge badge) { 
    this.badge = badge; 
} 
+0

如何鏈接兩個對象?請告訴我們session.open和session.close之間的代碼。 – jpkrohling 2011-02-24 06:13:24

回答

0

在調用保存的徽章,請嘗試以下

...... 

for(BadgeLevel badgeLevel : badge.getBadegeLevels() 
{ 
    badgeLevel.setBadge(badge); 
} 
repo.save(badge); 
+0

我做了,它的工作,但那個BadgeLevel也有一個名爲資產附加到它的新對象,這需要保存之前還BadgeLevel可以。我只是一個接一個地去做他們的路線。我想念LINQ到SQL。 – 2011-02-25 04:37:31

+0

是的,在Hibernate中,我們必須在保持雙向關係的同時保持謹慎,有時候這可能是一種痛苦。 – Prasanna 2011-02-25 07:07:34