Добрый вечер!
Возникла необходимость замаппить иерархию подразделений... Основная таблица выглядит так:
| Код | create table departments ( id number(9) primary key, up_id number(9), name varchar2(255) not null, short_name varchar2(25) )
|
Подразделений бывает несколько типов, для некоторых из них определяются дополнительные свойства в соединенных one-to-one таблицах.... очевидно, что в качестве маппинга надо использовать table-per-subclass... Но вот тут возникают проблемы: Например для подразделений 1 и 2 уровня вложенности дополнительных свойств нет...Классы (setter и getter убраны для удобочитабельности) аннотированы так: Это "основной" класс подразделений, от которого наследуются все остальные...
| Код | /** * Abstact class "father" of all department types */ @Entity @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "DEPARTMENTS") public abstract class Department {
@Id @Column(name = "ID") @SequenceGenerator(name = "DEPARTMENT_SEQUENCE", allocationSize = 1, sequenceName = "DEPARTMENTS_SEQ") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DEPARTMENT_SEQUENCE") private Integer ID;
@Column(name = "NAME") private String name;
@Column(name = "SHORT_NAME") private String shortName;
@ManyToOne @JoinColumn(name = "UP_ID", nullable = true) private Department parent; }
|
Это класс головного офиса:
| Код | @Entity public class HeadOffice extends Department {
@OneToMany private Set<Branch> branches = new HashSet<Branch>();
public void addBranch(Branch branch) { branches.add(branch); branch.office = this; } }
|
Это класс филиала:
| Код | @Entity public class Branch extends Department {
@ManyToOne HeadOffice office; }
|
Проблема в том что при сохранении ничего не сохраняется....Выполняется только выборка след. значения из sequence....
| Код |
HeadOffice o = new HeadOffice (); u.setName("HO"); u.setShortName("HO");
Branch b = new Branch(); b.setName("branch 2"); b.setShortName("branch 33");
o.addBranch(b);
session.saveOrUpdate(b); session.saveOrUpdate(d);
|
|