我在获取Column时未发现错误,并且我无法弄清楚什么是错误的,因此我寻求帮助。Hibernate持久性:列未找到
我需要生成一个列表Task
,其中引用User
和Project
。 我正在使用h2数据库。
下面是表:
CREATE TABLE TASK.APP_USER (
id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
username VARCHAR(25) NOT NULL,
firstName VARCHAR(25) NOT NULL,
lastName VARCHAR(25) NOT NULL,
password VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE TASK.PROJECT (
id INT GENERATED ALWAYS AS IDENTITY,
name VARCHAR(50) NOT NULL,
companyName VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE TASK.PROJECT_TASK (
id INT GENERATED ALWAYS AS IDENTITY,
projectId INT NOT NULL,
userId INT NOT NULL,
description VARCHAR(500) NOT NULL,
estimatedDurationHours INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (projectId) REFERENCES TASK.PROJECT(id),
FOREIGN KEY (userId) REFERENCES TASK.APP_USER(id),
);
下面是DAO类:
@Repository
public class TaskDaoHibernate implements TaskDao {
public TaskDaoHibernate() {
}
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
@Override
public List<User> fetchAllUsers() {
return getCurrentSession().createQuery("from User").list();
}
@Override
public User fetchUserById(Integer userId) {
return (User) getCurrentSession().get(User.class, userId);
}
@SuppressWarnings("unchecked")
@Override
public List<Project> fetchAllProjects() {
return getCurrentSession().createQuery("from Project").list();
}
@Override
public Project fetchProjectById(Integer projectId) {
return (Project) getCurrentSession().get(Project.class, projectId);
}
@Override
public void saveTask(Task task) {
getCurrentSession().save(task);
}
@SuppressWarnings("unchecked")
@Override
public List<Task> fetchAllTasks() {
return getCurrentSession().createQuery("from Task").list();
}
@Override
public Task fetchTaskById(Integer taskId) {
return (Task) getCurrentSession().get(Task.class, taskId);
}
@Override
public void editTask(Task task) {
getCurrentSession().update(task);
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
这里是同样的原理User类,我已经规划项目类:
@Entity
@Table(name="TASK.PROJECT")
public class Project implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue
private Integer id;
@Column(name = "NAME")
private String nazivProjekta;
@Column(name = "COMPANYNAME")
private String nazivTvrtke;
@ManyToOne
@JoinColumn(name="PROJECTID")
private Task task;
//setters, getters and overrided equal and hashcode methods
最后一类是Task类:
@Entity
@Table(name="TASK.PROJECT_TASK")
public class Task implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4633753821563474175L;
@OneToMany(mappedBy="id", fetch=FetchType.EAGER)
private List<User> user;
@OneToMany(mappedBy="id", fetch=FetchType.EAGER)
private List<Project> project;
@Column(name = "DESCRIPTION ")
private String opisZadatka;
@Column(name = "ESTIMATEDDURATIONHOURS")
private Integer trajanje;
@Id
@Column(name = "ID")
@GeneratedValue
private Integer id;
public Task(){
}
这里是堆栈跟踪的beggining:
org.h2.jdbc.JdbcSQLException: Column "USER0_.USERID" not found; SQL statement:
select user0_.ID as ID1_2_0_, user0_.ID as ID1_0_0_, user0_.ID as ID1_0_1_, user0_.FIRSTNAME as FIRSTNAM2_0_1_, user0_.USERNAME as USERNAME3_0_1_, user0_.LASTNAME as LASTNAME4_0_1_, user0_.USERID as USERID5_0_1_, task1_.ID as ID1_2_2_, task1_.DESCRIPTION as DESCRIPT2_2_2_, task1_.ESTIMATEDDURATIONHOURS as ESTIMATE3_2_2_ from TASK.APP_USER user0_ left outer join TASK.PROJECT_TASK task1_ on user0_.USERID=task1_.ID where user0_.ID=? [42122-176]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
at org.h2.message.DbException.get(DbException.java:178)
at org.h2.message.DbException.get(DbException.java:154)
我认为我已经发布的所有相关信息,但如果需要别的东西,我会很乐意将其添加
当您使用实体,每列将被映射到一个变量。你在'Task'类中有'List'用户,但是你没有列名:'userid',Hibernate不能引用它。 –
谢谢你的回答。我添加了annunci @Column(name =“USERID”)列,但我仍然遇到同样的问题 – Sarpy