v hibernate一對多關係
ª 多方做主控方
ª 多方返回一方的一個實例
ª 一方返回多方的List
v Localizable和ContentField類構成了一對多關係,具體實現如下
Ø Localizable中的代碼(一方)
ª xdoclet
/**
* @hibernate.class table="localizable" lazy="false"
* @hibernate.cache usage="read-write"
*/
ª /**
* Returns fields.
* @return List
* @hibernate.bag name="fields" inverse="true" lazy="true" cascade="delete"
* @hibernate.collection-key column="localizable_id"
* @hibernate.collection-one-to-many
* class="com.blandware.atleap.model.core.ContentField"
* 注:Localizable與ContentField構成一對多關係,ContentField爲主控方,維護表
* 關係,採用延遲加載,級聯delete操作,外鍵爲localizable_id
* hibernate.bag對應Java的List類型
*/
public List getContentFields() {
return contentFields;
}
public void setContentFields(List contentFields) {
this.contentFields = contentFields;
}
//以下代碼不是必須
public void addContentField(ContentField contentField) {
contentField.setOwner(this);
contentFields.add(contentField);
}
public void updateContentField(ContentField contentField) {
if ( !contentField.getOwner().equals(this) ) {
contentField.getOwner().contentFields.remove(contentField);
contentFields.add(contentField);
contentField.setOwner(this);
}
}
public void removeContentField(ContentField contentField) {
contentFields.remove(contentField);
}
Ø ContentField類中對應的代碼(多方)
ª xdoclet
/**
* @struts.form include-all="false" extends="BaseForm"
* @hibernate.class table="field" lazy="false"
*/
ª /**
* Returns the localizable owner
* @return a localizable
* @struts.form-field
* @hibernate.many-to-one column="localizable_id" not-null="true"
* outer-join="false"
*/
public Localizable getOwner() {
return owner;
}
public void setOwner(Localizable owner) {
this.owner = owner;
}
v ContentField類ContentFieldValue構成了一對多關係
Ø ContentField類中的代碼
ª xdoclet
/**
* @struts.form include-all="false" extends="BaseForm"
* @hibernate.class table="field" lazy="false"
*/
ª /**
* Returns the list of contentFieldValues dependent on locale.
* @return List
* @hibernate.bag name="contentFieldValues" inverse="true" lazy="true"
* cascade="delete"
* @hibernate.collection-key column="field_id"
* @hibernate.collection-one-to-many
* class="com.blandware.atleap.model.core.ContentFieldValue"
*/
public List getContentFieldValues() {
return contentFieldValues;
}
public void setContentFieldValues(List contentFieldValues) {
this.contentFieldValues = contentFieldValues;
}
Ø ContentFieldValue中的對應代碼
ª Xdoclet
/**
* @struts.form include-all="false" extends="BaseForm"
* @hibernate.class table="field_value" lazy="false" dynamic-update="true"
* dynamic-insert="true"
*/
ª
/**
* Returns the field
* @return a field
* @hibernate.many-to-one column="field_id" not-null="false"
*/
public ContentField getContentField() {
return contentField;
}
public void setContentField(ContentField contentField) {
this.contentField = contentField;
}
v ContentFieldValue類和ContentLocale構成了多對一關係,代碼略
注:
Ø Hibernate Lazy=true: Hibernate 使用延長初始化功能。如果不用延長初始化功能,hibernate會將所有關聯表的數據取出,導致一次hibernate操作,多條SQL語句的執行。延長初始化功能使得我們可以在真正索取對象的數據時,纔會從數據庫中查詢。
Ø@hibernate.cache usage="read-write"
使用第2層cache
Øinverse:用於標識雙向關聯中的被動方一端。
inverse=false的一方(主控方)負責維護關聯關係.默認值:false