спящий дедушка, родитель, проблема отображения ребенка - PullRequest
0 голосов
/ 03 мая 2011

У меня есть проблема, когда у меня есть эти три деда, родитель и ребенок, и я пытаюсь получить от родителя всех его детей, которые он дает мне половину, это дети странные, поскольку кажется, что я просто не могу понять, почему кто-то может мне помочь?

это тот случай:

      parentDao.getChildrenSet();//problem... return half every time
      parentDao.getChildrenWithSqlQuery();//works o.k but it's not the way to work 

Я думаю, что моя проблема в отображении, поэтому руководство будет оценено, спасибо.

Обратите внимание: каждая сущность получила свой get / set пустой c'or хэш и равно (без сопоставления сущностей внутри хеша и равно)

EDIT : я не используювстроенный идентификатор, мой босс высыхания есть за и против, и это то, что он думал ...

дед:

  @Entity
@Table(name = "grandfather")
@SequenceGenerator(name = "grandfather_SEQ", sequenceName = "grandfather_SEQ", allocationSize = 1)
public class ComponentTreeProfile extends TrackableEntity {

// id
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "grandfather_SEQ")
@Column(name = "grandfather_ID")
private Integer grandfatherId;
    @OneToMany(mappedBy = "grandfather")
private Set<Parent> parent;
        //some info equals, hashcode empty c'tor ...}

родитель

  @Entity
  @Table(name = "parent")
  public class Parent  extends TrackableEntity implements
    Serializable {
  @Id
@Column(name = "grandfather_ID", nullable = false, insertable = true, updatable = false)
private Integer grandfatherId;
@Id
    //seq is taking cared
@Column(name = "parent_ID", nullable = false, insertable = true, updatable = false)
private Integer profileModelId;
    @ManyToOne
@JoinColumn(name = "grandfather_ID", nullable = false, insertable = false, updatable = false)
private Grandfather grandfather;

@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)
private List<Child> child = new LinkedList<Child>();}

child

@Entity

@ Открытый класс Table (name = "Child") Child extends TrackableEntity реализует Serializable {

private static final long serialVersionUID = -2451336147838275971L;
// id's fields

@Id
@Column(name = "grandfather_ID", nullable = false, insertable = true, updatable = false)
private Integer profileId;
@Id
@Column(name = "Parent_ID", nullable = false, insertable = true, updatable = false)
private Integer ParentId;
@Id
    //seq is being handled 
@Column(name = "child_ID", nullable = false)
private Integer ChildTypeId;
    @ManyToOne(fetch=FetchType.LAZY)
@JoinColumns({
        @JoinColumn(name = "grandFather_ID", insertable = false, updatable = false),
        @JoinColumn(name = "parent_ID", insertable = false, updatable = false) })
private Parent parent;}

1 Ответ

0 голосов
/ 03 мая 2011

Проблема в классе Parent, идентификатор не отображается правильно, и вы отображаете один и тот же столбец дважды. Двойное сопоставление столбца не является проблемой, но этого можно избежать, сопоставив дедушку как часть идентификатора. У вас есть пример того, как это сделать, в документации hibernate .

Редактировать

Я просто прочитал документацию сам и обнаружил, что Hibernate теперь поддерживает более одного

столбец с аннотацией @Id, без определения встроенного идентификатора или IdClass. Я считаю, что hibernate не может распознать, в каком порядке следует использовать 2 целых числа для отображения Родителя.

Попробуйте добавить параметры referencedColumnName в оба @JoinColumn в Child.parent.

...