Java 休眠持久化对象成员

Java 休眠持久化对象成员,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,有没有办法持久化java.lang.Object类型的实体成员 假设我有一个实体DynamicProperty,它有一个成员 private String name; private Object value; 值可以有几种类型,基本上是非复杂值(字符串、布尔值、整数、小数、枚举…) 有什么办法吗?DB(Oracle)列类型应该是什么。如果它们是基本类型,您可以尝试将它们存储为字符串,然后将它们强制转换到getter中的正确类 还有另一个选项-您可以创建一个类,该类将保存值类型,并将具有必需类

有没有办法持久化java.lang.Object类型的实体成员

假设我有一个实体DynamicProperty,它有一个成员

private String name;
private Object value;
值可以有几种类型,基本上是非复杂值(字符串、布尔值、整数、小数、枚举…)


有什么办法吗?DB(Oracle)列类型应该是什么。

如果它们是基本类型,您可以尝试将它们存储为字符串,然后将它们强制转换到getter中的正确类

还有另一个选项-您可以创建一个类,该类将保存值类型,并将具有必需类型的字段,但只设置一个字段。差不多

class Foo
{
    Integer a;
    Double b;
    String c;
    int type;

    //getters and setters

    public Object getObject()
    {
        if (type == 1)
            return a;
        else if (type == 2)
            return b;
        return c;
    }
}
这是一个有点变通的办法,但它应该会奏效。我认为不可能将对象保持为抽象的


另外,看一看嵌入的注释,它可能会有所帮助。

我找到了一个解决方案…因为我的对象可以定义为几个有限的类型,基本类型我将对象标记为可序列化的DB列,作为BLOB,它起作用了

@Type(type = "serializable")
private Object value;

是否有人知道这是否与性能有关?或者可能发生的任何其他问题。

我不理解您的第一个建议,如果我将它们存储为VARCHAR,您的意思是java属性应键入为字符串?当您不知道类型时,转换将如何工作?如果我们讨论的是整数和Double,它很简单-只需使用
Integer.parseInt()
,如果使用expection
Double.parseDouble()
。如果要使用其他类型,可以将字符串的第一个字节存储为类型字节,例如
int7
将是
I7
double 3.14
-
D3.14
string foo
-
Sfoo
等。还可以有另一个字段来保存对象的类型,就像在我的代码示例中一样,并以它为基础进行强制转换。性能会比简单地将值转换为字符串更差。但主要的问题是,除了Java代码之外,您将无法对数据执行任何操作。即使使用您最喜欢的数据库客户机查看数据也不会有多大帮助,因为它将以Java专有的二进制格式存储,而不是以可读字符串的形式存储。我将使用一列来保存对象的类型(Double、Boolean等),并使用一列来存储对象的字符串表示形式。