我正在尝试从hibernate引用开始工作。
我有一个简单的表Pupil,其中包含id,name和age字段。我根据所有java-beans规则为它创建了正确的(我认为)java类。
我已经创建了配置文件 - hibernate.cfg.xml,就像参考中的示例一样。
我为一个Pupil类创建了hibernate映射,这是发生的错误。
<hibernate-mapping>
<class name="Pupil" table="pupils">
...
</class>
</hibernate-mapping>
table =“pupils”在我的IDE中是红色的,我看到消息“无法解析表学生”。我还在参考文献中创建了一个非常奇怪的注释,其中说大多数用户在尝试运行该示例时遇到同样的问题。
啊..我对这个例子非常生气..恕我直言,如果作者知道存在这样的问题,他们应该添加一些有关它的信息。
但是,我该如何解决?我不想在这里处理Ant,也不想在示例中使用其他工具。我正在使用MySql 5.0,但我认为没关系。
UPD:源代码
Pupil.java - 我的持久化课程
package domain;
public class Pupil {
private Integer id;
private String name;
private Integer age;
protected Pupil () { }
public Pupil (String name, int age) {
this.age = age;
this.name = name;
}
public Integer getId () {
return id;
}
public void setId (Integer id) {
this.id = id;
}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public Integer getAge () {
return age;
}
public void setAge (Integer age) {
this.age = age;
}
public String toString () {
return "Pupil [ name = " + name + ", age = " + age + " ]";
}
}
Pupil.hbm.xml是此类的映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="domain" >
<class name="Pupil" table="pupils">
<id name="id">
<generator class="native" />
</id>
<property name="name" not-null="true"/>
<property name="age"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml - hibernate的配置
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hbm_test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping resource="domain/Pupil.hbm.xml"/>
</session-factory>
</hibernate-configuration>
HibernateUtils.java
package utils;
import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration ().configure ().buildSessionFactory ();
} catch (HibernateException he) {
System.err.println (he);
throw new ExceptionInInitializerError (he);
}
}
public static SessionFactory getSessionFactory () {
return sessionFactory;
}
}
Runner.java - 用于测试hibernate的类
import org.hibernate.Session;
import java.util.*;
import utils.HibernateUtils;
import domain.Pupil;
public class Runner {
public static void main (String[] args) {
Session s = HibernateUtils.getSessionFactory ().getCurrentSession ();
s.beginTransaction ();
List pups = s.createQuery ("from Pupil").list ();
for (Object obj : pups) {
System.out.println (obj);
}
s.getTransaction ().commit ();
HibernateUtils.getSessionFactory ().close ();
}
}
我的libs:antlr-2.7.6.jar,asm.jar,asm-attrs.jar,cglib-2.1.3.jar,commons-collections-2.1.1.jar,commons-logging-1.0.4。 jar,dom4j-1.6.1.jar,hibernate3.jar,jta.jar,log4j-1.2.11.jar,mysql-connector-java-5.1.7-bin.jar
编译错误:无法解析表瞳孔
答案 0 :(得分:19)
这与Hibernate无关,这是一个IDEA“问题”,您需要正确配置它以便在hbm.xml中进行表名验证。来自this old thread:
为IntelliJ提供 正确的代码完成和验证 对于数据库表/列,它需要 了解数据库 您的应用程序的结构。 所以,我指的是 IntelliJ数据源。把它想象成一个 “开发时数据源”, 或类似的东西。
创建一个:
窗口 - &gt;工具Windows - &gt;数据来源
添加(“加”图标) - &gt; JDBC数据源作为替代方案,你可以试试 “日期”中的“导入”按钮 来源“工具窗口。这使得 IntelliJ搜索您的项目 特定配置文件(如 “hibernate.cfg.xml”),从中 可以直接导入数据源 定义
然而,如果失败,你可以随时 定义JDBC数据源 手动(jdbc url,驱动程序jar,驱动程序 上课等。)
配置数据源后, 通过打开SQL控制台来测试它 在它上(数据源中的“控制台”按钮 工具窗口),并键入一些 查询。 IDEA应该提供SQL代码 在这里完成,用于表和 专栏名称。
如果此步骤有效,请转到 数据源的定义,和 调用
“刷新表格”。这使IntelliJ 检索数据库结构。
接下来,打开“项目结构” (CTRL-Shift + Alt键-S)。 选择你的Hibernate方面(但是 “Facets”或“Modules”。
Hibernate的选项屏幕 facet有一个名为“DataSources”的窗格 映射“。在这里你可以关联你的 Hiberante会议工厂用 特定的IntelliJ数据源。
在此步骤之后,SQL表/列代码 完成和验证应该 也可以在.hbm文件中工作。
也适用于IDEA 7,必要时阅读整个帖子。
答案 1 :(得分:1)
我们需要更多信息来帮助您。
这是一个命令行应用程序吗?给出了什么运行时错误?你在用什么IDE?启用hibernate的调试日志记录的输出是什么?
答案 2 :(得分:1)
您的IDE告诉您无法找到该表。您可以将其更改为IDEA中的警告,以便您的项目至少可以编译。
答案 3 :(得分:1)
文件>设置>编辑器>检查>取消注释中未解析的数据库引用
答案 4 :(得分:0)
要验证hbm.xml文件映射,请执行以下操作(Intellij Ultimate 2017.1):
View -> Tool Windows -> Database -> click (+) sign -> Data Source -> MySQL
您已为数据库服务器添加了数据源。现在您应该创建数据源。下一步是将此数据源添加到hibernate映射。跟我来吧:
View -> Tool Windows -> Persistence
将打开“持久性”窗口。您必须看到列出的项目。
Right click on the project -> Assign Data Sources...
在打开的窗口中,应该有两列:&#34;会话工厂&#34;和&#34;数据源&#34;。只需在第二列中添加上面定义的数据源。