Java 如何将Hibernate与映射到不同DBs的自定义字段类型一起使用?

Java 如何将Hibernate与映射到不同DBs的自定义字段类型一起使用?,java,hibernate,spring,Java,Hibernate,Spring,我正在处理一个项目,我需要在hibernate中存储一个对象,它由许多用户定义的对象组成。我知道如何将hibernate映射用于只包含“usususal”类型(int、String等)的对象,但对于自定义类型,我看到了一些建议,例如使用注释@embedded和实现UserType,但我没有看到任何关于如何简单地将对象内部的对象映射到某个表的建议。注意:这些对象不在同一个表中,只是在同一个数据库中。我想做的是有一个映射,允许在我的DAO实现中使用此函数: public void store(MyO

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

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
}

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


对于ObjectA或ObjectC,您可以实现用户类型或将其标记为@Embedded(如果您希望其字段与MyObject字段位于同一个表中),或者将其作为实体映射到另一个表(如ObjectB中)。

如果某些对象的内容需要存储在单独的表中,然后这个对象应该是另一个持久实体,并且您应该使用实体之间的关联:OneToMany、manytone、OneToOne、ManyToMany,具体取决于基数


阅读。

因为它们不属于同一个表,我不得不使用UserType,但在我看来,好看的hibernate代码会开始看起来很糟糕,我也可以使用Spring/JDBC。如果它们不属于同一个表,请不要为编写UserType而烦恼,只要将所有对象作为实体映射到不同的表中即可,指定关系,一切都应该正常。我一直在尝试,但有一个问题。子项是否必须具有存储父项的字段?看看这个例子:它看起来不错,但问题是Stock有几个StockDailyRecords,但StockDailyRecord需要一个Stock字段。看起来很难看,在我当前的项目中,我不允许在类中添加字段。有没有关于工作的想法?在手册中没有看到任何对象。子对象不必具有父对象的字段(当然,它们映射到的表仍然需要具有父id的列)。只是不要将父类中的一对多关系指定为反向关系。@why\u vincent:您想要的是单向的一对多关系。手册中也有这种关系的例子。仔细阅读。