Java 休眠持久性:未找到列

Java 休眠持久性:未找到列,java,spring,hibernate,h2,Java,Spring,Hibernate,H2,我得到列未发现错误期间,我不能找出什么是错误的,所以我请求帮助 我需要生成一个引用用户和项目的任务列表。 我正在使用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 V

我得到列未发现错误期间,我不能找出什么是错误的,所以我请求帮助

我需要生成一个引用
用户
项目
任务
列表。 我正在使用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;
}


}
最后一个类是任务类:

@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(){

}

我想我已经发布了所有相关信息,但如果需要其他信息,我会很高兴地添加它

您的
任务
实体有一个
列表
,它期望您的
用户
拥有@manytone关系


但是,您的表
TASK.PROJECT\u TASK
TASK.APP\u USER
表有一个FK。也就是说,任务与用户有@manytone关系,而不是相反。

将表描述作为真实性的来源是不正确的

  • 从项目到任务的关系应该是单一的,而不是单一的
  • 同样,任务与项目之间的关系应该是多方面的,而不是一方面的
  • 任务和用户之间的关系应该是manytone而不是OneToMany

  • 使用实体时,每个列都将映射到一个变量中。您的
    任务
    类中有您的
    列表
    用户,但您没有列名:
    用户ID
    ,Hibernate无法引用它。感谢您的回答。我已经添加了带有annotion@column(name=“USERID”)的专栏,但我仍然有相同的问题问你的答案,我知道我做错了什么,所以你和我都是正确的。我已经完成了这一过程,但我现在被困在ObjectNotFoundException上。我将为此发布另一个问题。谢谢你的帮助
    @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(){
    
    }
    
    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)