Гррррр, пытаюсь реализовать очень простое дерево.Он не должен быть двунаправленным (поскольку обходы только сверху вниз), поэтому я предполагаю, что было бы лучше (то есть более эффективно использовать пространство), если бы он был однонаправленным, хотя мое отображение не выполняется:
@Entity
public class Node extends Model {
@Column(nullable=false, unique=true)
public String description;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
public List<Node> children = new LinkedList<Node>();
public Node() {}
public Node(String description) {
this.description = description;
}
public void addChild(String description) {
Node child = new Node(description);
child.save();
this.children.add(child);
}
}
Под "неудачей" я подразумеваю, что дочерние отношения не отображаются, следующий модульный тест не пройден;последний assert
ожидает 1, но получает 0. В разделе CRUD приложения я вижу, что оба узла фактически созданы и сохранены, но родительский узел не имеет дочерних элементов.Из этого я делаю вывод, что отображение нарушено:
public void testMenu() {
Node root = Node.find("byDescription", "root").first();
if (root == null) {
root = new Node("root");
root.save();
}
assertNotNull(root);
root.addChild("child 1");
JPA.em().flush();
JPA.em().getTransaction().commit();
JPA.em().getTransaction().begin();
JPA.em().clear(); // clear cache to grab the root from the db
root = Node.find("byDescription", "root").first();
assertEquals(1, root.children.size());
}
Я использую Play !, поэтому все эти члены являются публичными, а не частными, почему нет методов получения / установки и почему нет'это поле Id (Id наследуется от класса Model).По этой же причине есть некоторые нестандартные функции, такие как find()
и save()
.Они функционируют очень интуитивно, и доступ к публичным членам «преобразуется» через отражение, чтобы вызывать установщики и получатели, которые предоставляются или создаются.
Это не имеет значения, это мое отображение нарушено, поэтому, пожалуйста, попробуйтеи сосредоточиться на этом, а не на побочных проблемах, которые, я уверен, не вызывают проблемы.
Приветствия.
Обновление:
Спящий журнал:
Hibernate: /* from models.Node where description = ? */ select node0_.id as id35_, node0_.description as descript2_35_ from Node node0_ where node0_.description=? limit ?
Hibernate: /* insert models.Node */ insert into Node (description) values (?)
Hibernate: /* insert models.Node */ insert into Node (description) values (?)
Hibernate: /* from models.Node where description = ? */ select node0_.id as id35_, node0_.description as descript2_35_ from Node node0_ where node0_.description=? limit ?
Hibernate: /* load collection models.Node.children */ select children0_.Node_id as Node1_35_1_, children0_.children_id as children2_1_, node1_.id as id35_0_, node1_.description as descript2_35_0_ from Node_Node children0_ inner join Node node1_ on children0_.children_id=node1_.id where children0_.Node_id=?