gpt4 book ai didi

hibernate - Hibernate 3.0 中的条件映射?

转载 作者:行者123 更新时间:2023-12-04 06:50:32 25 4
gpt4 key购买 nike

如何在 hibernate 中创建取决于类型属性的映射,将数据插入/检索到正确的列。

结构:

表列:

|TYPE | CHARACTER | DATE | TIME | NUMERIC|

POJO:
class Pojo {

private int type;
private Object data;

...

}

例子:
  • 插入/更新
    如果类型为 1,我们将值输入到 CHARACTER
  • 选择
    如果类型是 2,我们从列 NUMERIC
  • 中获取值

    提示:
    我们有两列并且我们 PIVOT 结果的结构不是这种情况下的选项。

    最佳答案

    我为此选择的解决方案是使用整数鉴别器的每个类层次结构映射表。

    我创建了一个存储对象的基本抽象泛型类

     public abstract class ValueBase<T> {

    private Long id;
    private int valueType;
    private T value;

    public T getValue(){
    return value;
    }

    public void setValue(T value){
    this.value = value;
    }

    protected void setValueType(int valueType) {
    this.valueType = valueType;
    }

    public int getValueType(){
    return this.valueType;
    }

    private void setID(Long id) {
    this.id = id;
    }

    public int getID(){
    return this.id;
    }


    }

    对于我创建的类型管理和接口(interface),但可以使用 Arthur 提供的封装进行枚举。
    public interface IValueTypes() {

    public static final int NONE = -1;
    public static final int NUMERIC = 0;
    public static final int CHARACTER = 1;
    public static final int DATE = 2;
    public static final int TIME = 3;
    public static final int BOOLEAN = 4;

    }

    对于我创建的每种类型的类
     public class NumericType extedns ValueBase<BigDecinal> {

    public NumericType(){
    super();
    setValueType(IValueTypes.NUMERIC);
    }

    }

    public class CharacterType extedns ValueBase<String> {

    public NumericType(){
    super();
    setValueType(IValueTypes.CHARACTER);
    }

    }

    提示:为了允许使用数字作为鉴别器值,我们需要首先为我们正在映射的类指定它,因为默认情况下使用类名 [String],我尝试使用数字鉴别器进行子类映射,我们将得到 hibernate 错误说存在某种类型不匹配。
    <class name="TestValue" table="TestValues" schema="TEST" abstract="true" discriminator-value="-1"> 
    <id name="id" type="java.lang.Long">
    <column name="VALUE_ID" precision="22" scale="0" />
    <generator class="native"/>
    </id>

    <discriminator column="TYPE_VALUE" not-null="false" type="integer"/>

    <subclass discriminator-value="0" name="NumericType">
    <property name="value" type="java.math.BigDecimal" column="NUMERIC" not-null="false"/>
    </subclass>

    <subclass discriminator-value="1" name="CharacterType">
    <property name="value" type="java.lang.String" column="CHARACTER" not-null="false"/>
    </subclass>

    </class>

    虽然我们从数据库中检索对象总是在给定的类型类中,我们可以轻松地对其进行操作,并且我们使用一个地方通过保存基类来保存它们。

    关于hibernate - Hibernate 3.0 中的条件映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3185943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com