2014-11-09 2 views
1

У меня есть объект Hibernate, который имеет рекурсивное отношение к себе (родительские дети). И я использую XML-файл DbUnit для вставки некоторых данных в свои тесты, включая отношения.DbUnit и рекурсивный объект

Тем не менее, на моей тестовой службе, которая запрашивает список parent = null (корни), я также получаю дочерний элемент, указанный в XML, как корень (также имеющий parent = null).

Почему это происходит?

@Entity 
@Table(uniqueConstraints = @UniqueConstraint(columnNames={"parent", "name"})) 
public class Entity { 

    @Id 
    @Column(name = "id", unique = true) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "name", nullable = false) 
    private String name; 

    @ManyToOne 
    @JoinColumn(name = "parent") 
    private Entity parent; 

    @OneToMany(mappedBy = "parent") 
    private List<Entity> children; 

} 

И набор данных файла XML:

<dataset> 
    <entity id="1" name="root1" /> 
    <entity id="2" name="root2" /> 
    <entity id="3" name="child" parent="2"/> 
</dataset> 

При перечислении корней я также получить «ребенка» объект с родителем собственности нуль.

Если я создаю отношения с использованием экземпляров сущностей и сохраняю их, он работает.

Также у меня есть еще одна сущность с отношением «много-к-одному» к другому объекту (без рекурсии), и это работает, как ожидается, с использованием XML-данных DbUnit. Кажется, что у него есть некоторые проблемы с рекурсивными entites.

ответ

0

Проблема заключается в том, что DbUnit рассматривает только имена столбцов от первого появления тега таблицы в наборе данных Flat XML. Таким образом, «родительский» столбец в следующих тегах был проигнорирован.

Однако, поскольку мне нужно сначала вставить корневую папку, мне нужно, чтобы столбец «parent» был пустым. Но в наборе данных Flat XML нулевые значения обрабатываются путем омнимания столбца, что противоречит предыдущему утверждению.

Решение не должно использовать набор данных Flat XML, но обычный и более подробный Xml DataSet, который предоставляет тег, который может использоваться для столбцов нулевого значения.

Смежные вопросы