【发布时间】:2012-09-18 12:19:35
【问题描述】:
在使用休眠模式获取一些数据时遇到问题
我声明了两个独立的类,License 和 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;
}
}
Mac地址
@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;
}
}
我想要做的是以下。
在某些时候会创建一个新的许可证,并在许可证表中存储一行(这可以正常工作)
然后在稍后的时间收到用户的许可证和 MAC 地址。从数据库中检索许可证,我们检查提供的 macAddress 是否已经与许可证相关联(多个 macaddress 可以与许可证相关联),如果没有,我们想要存储 macaddress 以及许可证和 macaddress 之间的链接。
但是,尽管在 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;
为什么我不能让两者之间的关系持久化?
【问题讨论】:
标签: java hibernate hibernate-onetomany