如何使用Hibernate与映射到不同DB的自定义字段类型?

时间:2011-10-27 06:55:27

标签: java hibernate spring

我正在处理一个项目,我需要在hibernate中存储一个对象,它包含许多用户定义的对象。我知道如何将hibernate映射与只包含“ususal”类型(int,String等)的对象一起使用,但是对于自定义类型,我已经看到了诸如使用注释@embedded和实现UserType但我没有'的建议看到有关如何简单地将对象内的对象映射到某个表的任何建议。注意:这些对象不在同一个表中,只在同一个数据库中。我想要做的是在我的DaoImplementation中有一个允许这个函数的映射:

public void store(MyObject o){
hibernateTemplate.saveOrUpdate(o);
}

这对我的对象看起来很柔和:

public class MyObject{

private String name;

private ObjectA type;//Contains an int

private ObjectC look;//Contains a String.

private ObjectB[] children;//contains a string and other children.

public MyObject(){}

//Getters and setters omitted.

}

public class ObjectB{
private String name;
private ObjectB[] children;

public ObjectB(){}
//Getters setters omitted
}

2 个答案:

答案 0 :(得分:1)

如果某个对象的内容需要存储在一个单独的表中,那么这个对象应该是另一个持久化实体,你应该使用实体之间的关联:OneToMany,ManyToOne,OneToOne,ManyToMany,具体取决于基数。

阅读hibernate reference manual

答案 1 :(得分:0)

您应该为类ObjectB编写正常的实体映射(与映射MyObject的方式相同),将其映射到您选择的表,并在MyObject和ObjectB之间定义一对多关系。 saveOrUpdate保存传递的对象及其所有字段,因此ObjectB的数组也将被保存。

对于ObjectA或ObjectC,您可以实现UserType或将它们标记为@Embedded(如果您希望它们在MyObject字段所在的同一个表中的字段),或将它们作为实体映射到另一个表(如在ObjectB情况下)