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