Я бы хотел реализовать наследование в Hibernate.
Я создал объект ObjectClass:
@Entity
@Table(name = "object")
@Inheritance(strategy = InheritanceType.JOINED)
public class ObjectClass {
private id;
}
и объект CodeTable, который наследует класс объекта:
@Entity
@ForeignKey(name = "id")
@Table(name = "code_table")
public class CodeTable extends ObjectClass{
private String description;
}
в базе данных
таблица объектов:
CREATE TABLE `object` (
`id` bigint(11) NOT NULL auto_increment,
PRIMARY KEY (`id`),
)
Таблица кодовых таблиц:
-
CREATE TABLE `code_table` (
`id` bigint(11) NOT NULL auto_increment,
`description` varchar(45) character set latin1 default NULL,
PRIMARY KEY (`id`),
KEY `FK_object` (`id`),
CONSTRAINT `FK_object` FOREIGN KEY (`id`) REFERENCES `object` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
)
Я написал следующий код для извлечения данных из codeTable:
@SuppressWarnings( "unchecked" )
@Transactional( readOnly = true, propagation = Propagation.REQUIRED )
public Collection<CodeTable> findAll() {
Session session = getSessionFactory().getCurrentSession();
return
session.createCriteria( persistentClass
).setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY
).list();
}
Я получаю пустой список, хотя в кодируемой таблице есть одна запись.
Когда я пишу следующий SQL в моей базе данных:
SELECT * FROM `code_table`
Я получаю:
id = 1,
описание = компания.
Что пошло не так в моем определении Hibernate? Как я могу получить объект?
EDITED :
Мой файл hibernate.cfg.xml выглядит так:
<hibernate-configuration>
<session-factory>
<mapping class="com.mycompany.model.CodeTable" />
<mapping class="com.mycompany.model.ObjectClass" />
</session-factory>
</hibernate-configuration>