2011-06-06 55 views
1

我一直在保存嵌入式集合時遇到問題。我想出了這個瘋狂的解決方案,因爲我希望我的懶惰加載模型根據資源領域進行排序。休眠嵌入式地圖保存問題

我有三個表:

  • 資產(ID)
  • assets_resources(ASSET_ID,RESOURCE_ID,primary_image)
  • 資源(ID,logical_name)

我已經定義的表hibernate註釋如下: Assets.java:

@Entity 
@Table(name = "assets") 
public class Asset implements java.io.Serializable { 
@OneToMany 
@Cascade(CascadeType.ALL) 
@JoinTable(
name="assets_resources" 
, [email protected](name="asset_id") 
, [email protected](name="resource_id") 
) 
@MapKeyColumn(name="asset_id") 
@OrderBy("logical_name") 
private Map<AssetResource, Resource> resources; 
public Map<AssetResource, Resource > getResources() {return resources;} 
public void setResources(Map<AssetResource, Resource> resources) {this.resources = resources;} 
} 

assetResource.java

@Embeddable 
public class AssetResource { 
private Boolean primary_image; 
public Boolean getPrimaryImage() {return primary_image;} 
public void setPrimaryImage(Boolean primary_image) {this.primary_image = primary_image;} 

private Long id; 
public Long getId() {return id;} 
} 

resource.java

@Entity 
@Table(name="resources") 
public class Resource implements java.io.Serializable { 
... 
public String logical_name; 
public String getLogicalName() {return logical_name;} 
public void setLogicalName(String logical_name) { this.logical_name = logical_name;} 
} 

我可以遍歷儘管我控制器的延遲加載地圖,但我似乎無法保存/更新嵌入式領域。具體來說,我無法更新primary_image字段。


link演示了我正在嘗試做什麼。

回答

0

您是否可以保存數據庫中的屬性值。因爲我認爲你不能保存這個值,因爲你沒有將它與數據庫中的某一列進行映射。嘗試removind Emmbedded,然後添加表格和列屬性..

+0

這就是我開始,但我無法直接從模型排序。我認爲答案在於[在這篇博文中](http://ozgwei.blogspot.com/2007/12/hibernate-how-to-map-collection-of.html)。特別是在Alex說「重寫equals()和hashCode()非常重要」,但不幸的是我已經沒時間進一步研究這個問題了,我將回到標準模型並使用DAO方法來獲取排序結果。 – javablah 2011-06-07 13:51:22