gpt4 book ai didi

java - 映射与 Hibernate 的关系

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:15 25 4
gpt4 key购买 nike

我仍在学习如何使用 JPA 注释设置这些映射,因此这可能是初学者的错误。

我有一个 User 类和一个 Course 类。在数据库中,每个类(class)的每一行都有一个用户外键(将用户视为教授类(class)的老师)。所以每个User可以有多个Course,但是每个Course只有一个User。

在映射这些类时,我编写了以下代码:

@Entity
public class User extends BaseModel {

@OneToMany(mappedBy="course")
private Collection<Course> courses;

public void setCourses(Collection<Course> courses) { this.courses = courses; }

public Collection<Course> getCourses() { return courses; }

}

@Entity
public class Course extends BaseModel {

@ManyToOne
@JoinColumn(name="user_id")
private User user;

public void setUser(User user) { this.user = user; }

public User getUser() { return user; }

}

我省略了不相关的字段,BaseModel 仅占每个表中的主键。 这里有什么明显的错误吗?如果没有,那么调试此类问题的好方法是什么。

当我尝试在用户表上调用 select 时,收到 NullPointerException。但是,当我在 User 类中取出对 Course 类的引用时,一切都工作得很好。

有问题的行位于我的 DAO 类中。也许实体管理器无法初始化。这是代码。

Query query = Stripersist.getEntityManager().createQuery(getQuery(fieldName, null)).setParameter(fieldName, value);

createQuery() 只是返回:

String query = "FROM " + entityClass.getName() + " t WHERE t." + fieldName + " = :" + fieldName;

我正在使用 Stripes 框架、Hibernate 和 Stripersist,如果它们提供了有关问题所在的任何进一步线索。

最佳答案

乍一看,似乎应该这样写:

@OneToMany(mappedBy="user") 
private Collection<Course> courses;

我。 e. @OneToMany 中的mappedBy 应该指向指向当前对象的字段。

关于java - 映射与 Hibernate 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com