//话不多说,直接上代码
//为了公用,创建了一个共同的父类. baseInfo
public abstract class BaseInfo {
/**
* 逻辑键
* */
private Long id;
/**
* 详细信息
*/
private RichText richText;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToOne(fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.ALL })
@Cascade({ org.hibernate.annotations.CascadeType.ALL })
@JoinColumn(name = "richtext_id")
public RichText getRichText() {
return richText;
}
public void setRichText(RichText richText) {
this.richText = richText;
}
}
需要对同一个实体对象进行关联的所以类都继承这个父类
被共同关联的实体对象
package com.yyb.business.info.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;
import org.hibernate.annotations.Any;
import org.hibernate.annotations.AnyMetaDef;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.MetaValue;
import com.vanda.core.content.Content;
import com.vanda.core.web.BaseEntity;
/**
* 富文本.
*
* @author yhy
*
* @version 1.0
*/
@Entity
@Table(name = "rich_text")
public class RichText extends BaseEntity {
/** 标识. */
private Long id;
/** 实体类*/
private BaseInfo content;
/** 内容*/
private String text;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Any(metaColumn = @javax.persistence.Column(name = "meta_value"))
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
@MetaValue(targetEntity = Information.class, value = Information.META_VALUE)
})
@JoinColumn(name = "content_id")
@Fetch(FetchMode.SELECT)
public Content getContent() {
return content;
}
public void setContent(Content content) {
this.content = content;
}
@Column(name = "text")
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
接下来是多种关联的实体对象,需要继承共同父类
package com.yyb.business.info.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.vanda.core.content.Content;
/**
* 图文信息.
* @author yhy
*
*/
@Entity
@Table(name = "information")
public class Information extends BaseInfo implements Content {
//这里的这个常量是可以存入被共同关联的实体类里面的字段,用来区分的
public static final String META_VALUE="information";
//这个实体对象里面可以写各自的字段
}