好的,所以我已经撕下了我所拥有的东西而正在重建它,这就是我需要做的事情。
我有一个名为Property with的实体:
字符串名称;
@ManyToOne EntityType类型;
???????值
我也需要存储一个Value,但是根据Type,值可以是String,Double,也可以是指向另一个对象的链接(Class type.getJavaClass())。
我试图通过各种方式继承这样做,但仍然需要能够执行新的Property()并将值设置为null,直到选择Type时,选择适当类型的Type。 / p>
最优秀的是将Value设为Object类型(这样我可以放置String,Double或type.getJavaClass(),但hibernate不会让我这样做。:(
任何关于实现这一目标的好方法的想法或建议都将受到赞赏! 谢谢, 约书亚
答案 0 :(得分:0)
问题是Hibernate需要能够将它映射到数据库,因此一种Object不能真正起作用。
我建议你创建String类型的值。然后包装“get”和“set”调用,以便结束调用者不知道。例如:
public class Property
{
String name;
Enum Type;
String valueString;
public object getValue()
{
if( getType() == Long )
{
return Long.valueOf( getStringValue() );
}
if( getType() == String )
{
return valueString;
}
.....
}
public void setValue( obj )
{
if( obj instanceof Long )
{
setStringValue( obj.toString() )
setType( Long )
}
....
}
}
至于另一个对象的链接,是指你指向另一个表的链接?在这种情况下,我可能会为每个表创建一个单独的列,以便您可以让数据库保持参照完整性。然后你可以只增强getValue(),setValue()来获得合适的实体。