Hibernate OGM и MongoDB, результат запроса к составной структуре неверен
Я использую Hibernate OGM (5.0.3.Final) с MongoDB. Я сохранил эту составную структуру с помощью стратегии =InheritanceType.SINGLE_TABLE. Когда я пытаюсь сделать запрос к TextNode, я обнаружил, что свойства "text" равны нулю, но если я проверю БД с помощью оболочки mongo, то увижу, что текст свойств не равен нулю. Здесь БД. Я сообщаю код, который я использовал ниже.
Класс узла:
@Entity
@Inheritance( strategy=InheritanceType.SINGLE_TABLE )
public abstract class Node {
private Set<NodeLink> children;
private String id;
private String name;
public Node(){
children = new HashSet<>();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Type(type = "objectid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@OneToMany( mappedBy="source" )
public Set<NodeLink> getChildren() {
return children;
}
void setChildren(Set<NodeLink> children) {
this.children = children;
}
}
Класс NodeLink:
@Entity
public class NodeLink {
private String id;
private Node source;
private Node target;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Type(type = "objectid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne
public Node getSource() {
return source;
}
void setSource(Node source) {
this.source = source;
}
public void assignSource(Node source) {
setSource(source);
source.getChildren().add(this);
}
@ManyToOne
public Node getTarget() {
return target;
}
void setTarget(Node target) {
this.target = target;
}
public void assignTarget(Node target) {
setTarget(target);
}
}
Класс SimpleNode:
@Entity
public class SimpleNode extends Node {
public SimpleNode() {
super();
}
}
Класс TextNode:
@Entity
public class TextNode extends Node {
private String text;
public TextNode() {
super();
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Основной класс:
public class MainNode {
private static EntityManagerFactory ENTITY_MANAGER_FACTORY;
private static EntityManager manager;
public static void main(String[] args) {
ENTITY_MANAGER_FACTORY = Persistence.createEntityManagerFactory("JavaHelps");
manager = ENTITY_MANAGER_FACTORY.createEntityManager();
createDB();
queryDB();
}
//
// CREATE DB
//
private static void createDB() {
EntityTransaction transaction1 = manager.getTransaction();
transaction1.begin();
Node root1 = new SimpleNode();
root1.setName("root");
Node child1 = new SimpleNode();
child1.setName("children1");
TextNode child2 = new TextNode();
child2.setName("children2");
child2.setText("a text");
NodeLink nl4=new NodeLink();
nl4.assignSource(root1);
nl4.assignTarget(child1);
NodeLink nl3=new NodeLink();
nl3.assignSource(root1);
nl3.assignTarget(child2);
manager.persist(root1);
manager.persist(child1);
manager.persist(child2);
manager.persist(nl4);
manager.persist(nl3);
transaction1.commit();
}
//
// QUERY DB
//
@SuppressWarnings("unchecked")
private static void queryDB() {
"db.Node.find({'type_id':"+"ObjectId('"+typeId+"')})";
Node node = manager.find(SimpleNode.class, "5832c8762fc11706a29125b5");
print(node);
}
private static void print(Node n) {
System.out.println(n.getClass().getSimpleName() + " : " + n.getName() + " : " + (n.getClass().getSimpleName().equals("TextNode")? ((TextNode)n).getText() : "") );
for(NodeLink c : n.getChildren()) {
print(c.getTarget());
}
}
}
У меня вопрос: я нашел ошибку в Hibernate OGM или в моем коде есть ошибка? Благодарю.