有得到一些数据坚持用休眠无法坚持冬眠4
问题一对多的关系,我宣布两个独立的类别,许可证和MACADDRESS。 MacAddress可以独立存在,但也可以链接到许可证,当hibernate生成基础表时,它会创建一个License,MacAddress和License_MacAddress表。
许可证
@Entity
public class License
{
@Id
@GeneratedValue
private Integer id;
@Column(nullable = false)
private String license;
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private
List<MacAddress> macAddresses;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getLicense()
{
return license;
}
public void setLicense(String license)
{
this.license = license;
}
public List<MacAddress> getMacAddresses()
{
return macAddresses;
}
public void setMacAddresses(List<MacAddress> macAddresses)
{
this.macAddresses = macAddresses;
}
}
MACADDRESS
@Entity
public class MacAddress
{
@Id
@GeneratedValue
private Integer id;
@Column(nullable = false)
private String macAddress;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getMacAddress()
{
return macAddress;
}
public void setMacAddress(String macAddress)
{
this.macAddress = macAddress;
}
}
什么即时试图做的是以下几点。
在某一点上创建一个新的许可证和行存储在授权表(此工作正常)
然后在以后的时间,用户的许可,并MACADDRESS被接收。从数据库中检索许可证,我们检查提供的macAddress是否已经与许可证关联(多个macaddresses可以与许可证关联),如果没有,我们则要存储macaddress和许可证与macaddress之间的链接n。
尽管在License的@OneToMany注释中设置了CascadeType.ALL,但没有存储Mac地址信息。我可以通过单独保存该对象来手动保存MacAddress,但License_MacAddress表仍然为空。
代码
session = Db.getSession();
License license = getLicense(session, licenseStr);
List<MacAddress> macAddresses = license.getMacAddresses();
for(MacAddress mac:macAddresses)
{
if(mac.getMacAddress().equals(macAddress))
{
return;
}
}
MacAddress mac = new MacAddress();
mac.setMacAddress(macAddress);
session.save(mac);
license.getMacAddresses().add(mac);
session.saveOrUpdate(license);
return;
为什么我不能得到持续两者之间的关系?
谢谢,就是这样,完全忘记了交易,我认为这是因为m y createLicense方法没有使用事务或者工作我猜这是因为它只更新了一个实体和表而Hibernate创建了这个简单情况下的transcation隐含性? –