有得到一些數據堅持用休眠無法堅持冬眠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隱含性? –