我正在使用Hibernate构建应用程序。我使用的数据库模式包含(其中包括)两个表,分别为assignment
和assignment_type
。后者包含描述assignment
类型(例如“书面”,“实用”)的主键/值对。Hibernate:将一个新的数据库对象的一对多引用设置为另一个对象,而不先获取现有对象
assignment
然而,是一个抽象类,扩展的类如written_assignment
和practical_assignment
。为此,我使用类表继承方法(some details on the topic)。现在
,它将使意义就像written_assignment
创建类的实例中,这样的过程中设置在assignment_type
合适的对象的引用:
public WrittenAssignment() {
AssignmentType assignmentType = ...; // Create or acquire appropriate instance
this.setAssignmentType(assignmentType);
}
据我了解,去与“创建实例”方法将只能工作一次,即一次是数据库中没有对象的状态,但具有该值(因为assignment_type
表的值设置为唯一的)。
有没有办法在WrittenAssignment
的构造函数中设置从assignment_type
开始的对象的引用而不先获取它?奖金问题:如果没有匹配的对象存在,它可以被创建吗?
谢谢,这个作品像一个魅力! 在处理超类查询时,鉴别器可以用来自动获取适当的子类吗? – koala
尝试执行'Assignment'实体的查询,返回的结果实例的真实类必须是具体类型(不是父抽象类型)。 – JMSilla
再次感谢!这将是我期望的行为,并且它有部分功能。我调整了'toString'方法,以便识别真正的类,这是可行的。但是,我无法使用'instanceof'检查子类,也不能对它进行类型转换。 'getClass()。getName()'返回抽象类的名称,后跟一串下划线,美元符号和其他字符。我想这可能是一些我不明白的反思。 – koala