2011-02-23 42 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