Java 休眠持久化对象成员
有没有办法持久化java.lang.Object类型的实体成员 假设我有一个实体DynamicProperty,它有一个成员Java 休眠持久化对象成员,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,有没有办法持久化java.lang.Object类型的实体成员 假设我有一个实体DynamicProperty,它有一个成员 private String name; private Object value; 值可以有几种类型,基本上是非复杂值(字符串、布尔值、整数、小数、枚举…) 有什么办法吗?DB(Oracle)列类型应该是什么。如果它们是基本类型,您可以尝试将它们存储为字符串,然后将它们强制转换到getter中的正确类 还有另一个选项-您可以创建一个类,该类将保存值类型,并将具有必需类
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()
,如果使用expectionDouble.parseDouble()
。如果要使用其他类型,可以将字符串的第一个字节存储为类型字节,例如int7
将是I7
,double 3.14
-D3.14
,string foo
-Sfoo
等。还可以有另一个字段来保存对象的类型,就像在我的代码示例中一样,并以它为基础进行强制转换。性能会比简单地将值转换为字符串更差。但主要的问题是,除了Java代码之外,您将无法对数据执行任何操作。即使使用您最喜欢的数据库客户机查看数据也不会有多大帮助,因为它将以Java专有的二进制格式存储,而不是以可读字符串的形式存储。我将使用一列来保存对象的类型(Double、Boolean等),并使用一列来存储对象的字符串表示形式。