我有一个使用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 + "}";
}
}
最后,休眠连接配置类:
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);
}
}
}
对这个问题有任何想法吗? 谢谢。
答案 0 :(得分:0)
检查表名的大写字母。您注释了@Table(name = "person")
,并报告该表Person
存在。据我所记得,H2使用区分大小写的表名。