gpt4 book ai didi

java - H2 中 Hibernate ORM 的问题

转载 作者:行者123 更新时间:2023-12-02 00:54:31 28 4
gpt4 key购买 nike

我有一个使用 Hibernate 和 H2 数据库的项目。项目目录中有一个H2数据库文件。该数据库文件包含一个表 Person。我可以使用 H2 控制台向该表插入或从中删除数据,但问题是,当我尝试通过 Hibernate 框架从该表获取对象时,我会收到此错误:

Caused by: org.h2.jdbc.JdbcSQLException: Table "PERSON" not found; SQL statement:
select person0_.ID as ID1_0_0_, person0_.NAME as NAME2_0_0_, person0_.PHONE_NUMBER as PHONE_NU3_0_0_ from person person0_ where person0_.ID=? [42102-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readTableOrView(Parser.java:5920)
at org.h2.command.Parser.readTableFilter(Parser.java:1430)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:2138)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2287)
at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
at org.h2.command.Parser.parseSelect(Parser.java:1919)
at org.h2.command.Parser.parsePrepared(Parser.java:463)
at org.h2.command.Parser.parse(Parser.java:335)
at org.h2.command.Parser.parse(Parser.java:307)
at org.h2.command.Parser.prepareCommand(Parser.java:278)
at org.h2.engine.Session.prepareLocal(Session.java:611)
at org.h2.engine.Session.prepareCommand(Session.java:549)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:304)

这是 hibernate.cfg.xml 文件:

<hibernate-configuration xmlns="http://www.hibernate.org/xsd/orm/cfg">
<session-factory>
<property name="connection.url">jdbc:h2:C:\Users\Amir\Desktop\hibernate\src\main\resources\test</property>
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>

,人员 POJO:

@Entity
@Table(name = "person")
public class Person {

@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
@Column(name = "PHONE_NUMBER")
private String phoneNumber;

public Person() {}

public Person(String name, String id, String phoneNumber) {
this.name = name;
this.id = id;
this.phoneNumber = phoneNumber;
}

public void setId(String id) {
this.id = id;
}

public String getId() {
return this.id;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; }

public String getPhoneNumber() {
return this.phoneNumber;
}

@Override
public String toString() {
return "Person {Name= " + name + ", ID= " + id + ", Phone number= " + phoneNumber + "}";
}

}

最后是hibernate连接配置类:

public class PersonDAO {
private static SessionFactory sessionFactory;

static {
try {
sessionFactory = new Configuration().configure().addAnnotatedClass(Person.class).buildSessionFactory();
} catch (Exception ex) {
ex.printStackTrace();
}
}

public PersonDAO() {

}

public static void insertRecord(Person person) {
try (Session session = sessionFactory.openSession()) {
session.beginTransaction();
session.save(person);
session.getTransaction().commit();
}
}

public static Person getRecord(String id) {
try (Session session = sessionFactory.openSession()) {
return session.find(Person.class, id);
}
}
}

对这个问题有什么想法吗?谢谢。

最佳答案

检查表名的大小写。您注释了 @Table(name = "person") 并报告表 Person 存在。据我记得,H2 使用区分大小写的表名。

关于java - H2 中 Hibernate ORM 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57831663/

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