初识项目之公共父类

本文介绍了一种基于Java的富文本实体类设计方法,通过创建一个通用的基类`BaseInfo`来实现多个实体之间的关联。具体展示了如何定义富文本类`RichText`以及图文信息类`Information`,并使用Hibernate注解实现这些类之间的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//话不多说,直接上代码

//为了公用,创建了一个共同的父类. 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";

    //这个实体对象里面可以写各自的字段



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值