Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Сложный mapping подразделений на Hibernate


Автор: stg_unholy 5.9.2007, 19:21
Добрый вечер! 

Возникла необходимость замаппить иерархию подразделений...
Основная таблица выглядит так:
Код

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);    



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)