Rom*_*man 8 java mapping hibernate intellij-idea
我正在尝试从hibernate引用开始工作的例子.
我有一个简单的表Pupil,其中包含id,name和age字段.我根据所有java-beans规则为它创建了正确的(我认为)java类.
我已经创建了配置文件--hibernate.cfg.xml,就像参考中的示例一样.
我已经为一个类Pupil创建了hibernate映射,这里发生了错误.
<hibernate-mapping>
<class name="Pupil" table="pupils">
...
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
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 + " ]";
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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 ();
}
}
Run Code Online (Sandbox Code Playgroud)
我的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
编译错误:无法解析表学生
Pas*_*ent 20
这与Hibernate无关,这是一个IDEA"问题",您需要在hbm.xml中正确配置表名称验证.从这个旧线程:
为了使IntelliJ能够为数据库表/列提供正确的代码完成和验证,它还需要了解应用程序的数据库结构.所以,我指的是IntelliJ数据源.将其视为"开发时数据源",或类似的东西.
要创建一个:
Window - > Tool Windows - > Data sources
Add("plus"icon) - > JDBC数据源或者,您可以尝试"日期来源"工具窗口中的"导入"按钮.这使IntelliJ在您的项目中搜索某些特定的配置文件(如"hibernate.cfg.xml"),从中可以直接导入数据源定义.
但是,如果失败,您可以始终手动定义JDBC数据源(jdbc url,驱动程序jar,驱动程序类等).
配置数据源后,通过在其上打开SQL控制台(数据源工具窗口中的"控制台"按钮)对其进行测试,然后键入一些查询.对于表名和列名,IDEA应在此处提供SQL代码完成.
如果此步骤有效,请转到数据源的定义,然后调用
"刷新表".这使IntelliJ检索数据库结构.
接下来,打开"项目结构"(Ctrl-Shift-Alt-S).选择你的Hibernate方面(虽然是"Facets"或"Modules").
Hibernate facet的选项屏幕有一个名为"DataSources Mapping"的窗格.在这里,您可以将Hiberante会话工厂与特定的IntelliJ数据源相关联.
在此步骤之后,SQL表/列代码完成和验证也应该在.hbm文件中工作.
也适用于IDEA 7,如有必要,请阅读整个主题.
Moh*_*asi 15
要验证 hbm.xml 文件映射,只需执行以下操作(Intellij Ultimate 2017.1):
View -> Tool Windows -> Database -> click (+) sign -> Data Source -> MySQL
Run Code Online (Sandbox Code Playgroud)
您已为数据库服务器添加了数据源。现在您应该创建数据源。下一步是将此数据源添加到休眠映射。跟着我:
View -> Tool Windows -> Persistence
Run Code Online (Sandbox Code Playgroud)
将打开持久性窗口。您必须看到列出的项目。
Right click on the project -> Assign Data Sources...
Run Code Online (Sandbox Code Playgroud)
在打开的窗口中,应该有 2 列:“会话工厂”和“数据源”。只需在第二列中添加上面定义的数据源。
| 归档时间: |
|
| 查看次数: |
18988 次 |
| 最近记录: |