Я проверил структуру баз данных с аннотацией на основе и все это fine.Test его на вашей стороне, и проверить, что вы пропустите:
Ребенок:
@Entity
@Table(name = "child")
@XmlRootElement
public class Child implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 255)
@Column(name = "name")
private String name;
@JoinColumn(name = "idobject", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private entity.Object object;
public Child() {
}
public Child(Integer id) {
this.id = id;
}
//getter and setters
}
Объект:
@Entity
@Table(name = "object")
@XmlRootElement
public class Object implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 255)
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "object", fetch = FetchType.LAZY)
private List<Child> children;
@JoinColumn(name = "idparent", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
public Object() {
}
public Object(Integer id) {
this.id = id;
}
//getter and setter
}
Родитель:
@Entity
@Table(name = "parent")
@XmlRootElement
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 255)
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private List<entity.Object> objects;
public Parent() {
}
public Parent(Integer id) {
this.id = id;
}
//getter and setters
}
и мой запрос:
public class ObjectDao {
public static List<Object> getObjects() {
EntityManager em = Persistence.createEntityManagerFactory("test").createEntityManager();
try {
Query query = em.createQuery("SELECT o from Object o JOIN FETCH o.parent JOIN FETCH o.children");
List l = query.getResultList();
return l;
} catch (Exception ex) {
ex.printStackTrace();
return new ArrayList<Object>();
} finally {
em.close();
}
}
}
мой сервлет для отладки:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<entity.Object> objects = ObjectDao.getObjects();
for (entity.Object obj : objects) {
System.out.println("object name:" + obj.getName());
System.out.println("parent name:" + obj.getParent().getName());
List<Child> children = obj.getChildren();
System.out.println("children:");
for(Child c: children){
System.out.println(c.getName());
}
}
}
Результат:
object name:Object 1
parent name:Parent 1
children:
Child Name
Tank Вы для вас ответ я буду стараться использовать его и найти то, что проблема есть. Я опубликую что-нибудь, когда оно будет разрешено. – Flyout
Теперь это работает, я не знаю, что пошло не так. – Flyout