【发布时间】:2016-10-27 13:26:25
【问题描述】:
我之前搜索过这个异常。但是没有解决方案可以解决我的问题。
我有两个班级:
@Entity
@Table(name = "user")
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@OneToMany
@JoinColumn(name = "tutor_id")
private Set<Tutorium> tutoria;
}
和
@Entity
@Table(name = "tutorium")
public class Tutorium {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Colum(name = "tutor_id")
private int tutor_id;
}
所以语义是“一个用户可以教很多教程”。
但是当我启动我的应用程序时,我得到了异常:
"创建会话工厂失败 object.org.hibernate.AnnotationException:使用
@OneToMany或@ManyToMany针对未映射的类: model.User.tutorial[model.Tutorium]"。
有谁知道,我该如何解决这个问题?
编辑:
试图给你一个我如何访问类的小例子:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
public class UserFilter {
private static SessionFactory factory;
public UserFilter() {
try{factory = new Configuration().configure().addAnnotatedClass(User.class).buildSessionFactory();}
catch(Exception e) {}
}
public Collection<User> getUser() {
Session session = factory.openSession();
Transaction t = null;
try{
t = session.beginTransaction();
CriteriaBuilder cb = session.getEntityManagerFactory().getCriteriaBuilder();
Join<User, Tutorium> tutoria = this.root().join("tutoria");
CriteriaQuery output = cb.createQuery(User.class);
output.groupBy(this.root().get("id"));
TypedQuery q = session.getEntityManagerFactory().createEntityManager().createQuery(output);
List users = q.getResultList();
return users;
}
catch(Exception e) {}
finally {
session.close();
}
}
}
带有 join 和 groupBy 子句的部分尚未经过测试。这就是功能,我接下来要实现。但在我能够做到这一点之前,抛出了异常。
我希望,这个例子很清楚。
【问题讨论】:
-
在您的 persitence.xml 中,您是否使用类路径扫描来发现类?如果没有,是否列出了
Tutorium?或者,有时会发生,Tutorium中的@Entity注释不是来自 JPA 包吗? -
我还没有创建persistence.xml。因为link 的教程说,如果您使用注释,则不需要 xml-configfile... :O
-
除了您的映射看起来不适合您想要的,正如发布的答案所述,我认为这不是您的问题的原因。看看stackoverflow.com/questions/4956855/…
-
@Stefan,据我了解 (tutorialspoint.com/hibernate/hibernate_annotations.htm),他们指的是 inside 每个实体类的映射信息。我很好奇你是如何尝试与你的班级一起工作的。你能在上面贴一个小sn-p吗?我想知道您是采用“休眠”还是“JPA”方式。
-
"persistence.xml" 在 JPA 中是强制性的,因此您的参考是错误的。查找任何不错的 JPA 教程