Hibernate hbm.xml id 标签生成器 属性 不工作
Hibernate hbm.xml id tag generator property does not work
我正在尝试构建一个 Hibernate 项目。
我的问题就像标题一样。我有一个休眠映射 xml 和
class 由ant进程构建。
而且我还想让你看看我的配置文件dtd。在国内,很少有人用这个框架,所以这里没有太多参考。(我看了一本2009年出版的书,它的目标是hibernate3.X)
我将附上我的 ant 构建文件、配置文件、映射文件、执行文件和错误日志。
这是我的build.xml
(蚂蚁)
<?xml version="1.0" encoding="UTF-8"?>
<project name="HibernateEx2" default="db" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property name="source.root" value="src"/>
<property name="class.root" value="classpath"/>
<property name="data.dir" value="data"/>
<artifact:dependencies pathId="dependency.classpath">
<dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.10"/>
<dependency groupId="org.hibernate" artifactId="hibernate-core" version="4.3.10.Final">
<exclusion groupId="javax.transaction" artifactId="jta"/>
</dependency>
<!-- 3.2.4.GA - After hibernate4 need upgrade hibernate-tools -->
<dependency groupId="org.hibernate" artifactId="hibernate-tools" version="4.3.1.CR1"/>
<dependency groupId="org.apache.geronimo.specs" artifactId="geronimo-jta_1.1_spec" version="1.1.1"/>
<!-- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory -->
<dependency groupId="commons-logging" artifactId="commons-logging" version="1.2"/>
<dependency groupId="log4j" artifactId="log4j" version="1.2.17"/>
<!-- java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder -->
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.7.12"/>
</artifact:dependencies>
<path id="project.class.path">
<pathelement location="${class.root}"/>
<path refid="dependency.classpath" />
</path>
<!-- Explaining how to use hibernate -->
<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.class.path"/>
<target name="db" description="Run HSQLDB database management UI against the database file -- use when application is not running">
<java classname="org.hsqldb.util.DatabaseManager" fork="yes">
<classpath refid="project.class.path"/>
<arg value="-driver"/>
<arg value="org.hsqldb.jdbcDriver"/>
<arg value="-url"/>
<arg value="jdbc:hsqldb:${data.dir}/music/"/>
<arg value="-user"/>
<arg value="sa"/>
</java>
</target>
<target name="print-classpath" description="Show the dependency class path">
<property name="class.path" refid="dependency.classpath"/>
<echo>${class.path}</echo>
</target>
<!-- Generate java code -->
<target name="codegen" description="Generate Java source from the OR mapping files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2java/>
</hibernatetool>
</target>
<!-- Creating Sub drectories -->
<target name="prepare" description="Set up build structures">
<mkdir dir="${class.root}"/>
<copy todir="${class.root}">
<fileset dir="${source.root}">
<include name="**/*.properties"/>
<include name="**/*.xml"/>
</fileset>
</copy>
</target>
<!-- Creating Schema for mapping files -->
<target name="schema" depends="prepare" description="Generate DB schema from the OR mappinf files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2ddl drop="yes"/>
</hibernatetool>
</target>
<!-- Compile Java -->
<!-- added includeantruntime="false" to javac, since terminal compile warning -->
<target name="compile" depends="prepare" description="Compiles all java classes">
<javac srcdir="${source.root}" destdir="${class.root}"
debug="on" optimize="off" deprecation="on" includeantruntime="true">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="ctest" depends="compile" description="Creates and persists some sample data">
<java classname="org.owls.ht.CreateTest" fork="true">
<classpath refid="project.class.path"/>
</java>
</target>
<target name="qtest" description="Run a simple Hibernate query" depends="compile">
<java classname="org.owls.ht.QueryTest" fork="true">
<classpath refid="project.class.path"/>
</java>
</target>
</project>
休眠配置文件 hibernate.cfg.xml
。使用 3.0 DTD 看起来非常可疑,而我的项目包括 hibernate-core 4.3.10.final
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration >
<session-factory>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:data/music</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.shutdown">true</property>
<!-- Connection Pool -->
<property name="connection.pool_size">1</property>
<!-- Hibernate Session Manager Activate -->
<property name="current_session_context_class">thread</property>
<!-- Unable Cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Batch service unable -->
<property name="jdbc.batch_size">0</property>
<property name="show_sql">true</property>
<!-- Mapping documents -->
<mapping resource="org/owls/ht/data/Track.hbm.xml"/>
</session-factory>
</hibernate-configuration>
映射文件。我认为这 id
部分不起作用,尤其是 <generator="native"/>
部分。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiberbate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.owls.ht.data.Track" table="TRACK">
<meta attribute="class-description">
Playable Track list
@author juneyoungoh
</meta>
<id name="id" type="int" column="TRACK_ID">
<meta attribute="scope-set">protected</meta>
<generator class="native"/>
</id>
<property name="title" type="string" not-null="true"/>
<property name="filePath" type="string" not-null="true"/>
<property name="playTime" type="time">
<meta attribute="field-description">Duration</meta>
</property>
<property name="added" type="date">
<meta attribute="field-description">Created</meta>
</property>
<property name="volume" type="short" not-null="true">
<meta attribute="field-description">Volume</meta>
</property>
</class>
</hibernate-mapping>
这是输出,Track.java
package org.owls.ht.data;
// Generated Jul 13, 2015 3:47:01 PM by Hibernate Tools 4.3.1
import java.util.Date;
/**
* Playable Track list
* @author juneyoungoh
*
*/
public class Track implements java.io.Serializable {
private int id;
private String title;
private String filePath;
/**
* Duration
*/
private Date playTime;
/**
* Created
*/
private Date added;
/**
* Volume
*/
private short volume;
public Track() {
}
public Track(String title, String filePath, short volume) {
this.title = title;
this.filePath = filePath;
this.volume = volume;
}
public Track(String title, String filePath, Date playTime, Date added, short volume) {
this.title = title;
this.filePath = filePath;
this.playTime = playTime;
this.added = added;
this.volume = volume;
}
public int getId() {
return this.id;
}
protected void setId(int id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFilePath() {
return this.filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
/**
* * Duration
*/
public Date getPlayTime() {
return this.playTime;
}
public void setPlayTime(Date playTime) {
this.playTime = playTime;
}
/**
* * Created
*/
public Date getAdded() {
return this.added;
}
public void setAdded(Date added) {
this.added = added;
}
/**
* * Volume
*/
public short getVolume() {
return this.volume;
}
public void setVolume(short volume) {
this.volume = volume;
}
}
这是我的测试 class,其中包含 main
方法。
package org.owls.ht;
import java.sql.Time;
import java.util.Date;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.owls.ht.data.Track;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
public class CreateTest {
private static Track makingTrack(String title, String filePath, Date playTime){
Track tmp = new Track(title, filePath, playTime, new Date(), (short)0);
return tmp;
}
public static void main(String[] args) throws Exception {
Configuration config = new Configuration();
config.configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save(makingTrack("Russian Trance"
, "vol2/album610/track02.mp3", Time.valueOf("00:03:30")));
session.save(makingTrack("Video Killed the Radio Star"
, "vol2/album611/track12.mp3", Time.valueOf("00:03:49")));
session.save(makingTrack("Gravity's Angel"
, "vol2/album175/track03.mp3", Time.valueOf("00:06:06")));
tx.commit();
} catch (Exception e){
if(tx != null) {
tx.rollback();
}
throw new Exception("Transaction failed", e);
} finally{
session.close();
}
sessionFactory.close();
}
};
//===============================
终于!这是我通过 ant 命令 运行 此代码时的错误消息。
Buildfile: /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/build.xml
prepare:
compile:
[javac] Compiling 2 source files to /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/classpath
ctest:
[java] 15:50:01,618 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[java] 15:50:01,643 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[java] 15:50:01,651 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[java] 15:50:01,656 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[java] 15:50:01,693 INFO Configuration:2075 -HHH000043: Configuring from resource: /hibernate.cfg.xml
[java] 15:50:01,693 INFO Configuration:2094 -HHH000040: Configuration resource: /hibernate.cfg.xml
[java] 15:50:01,814 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 15:50:01,882 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[java] 15:50:01,938 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 15:50:02,004 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[java] 15:50:02,190 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[java] 15:50:02,193 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[java] 15:50:02,194 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[java] 15:50:02,194 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[java] 15:50:02,196 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[java] 15:50:02,585 INFO Dialect:145 -HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
[java] 15:50:02,607 INFO LobCreatorBuilder:97 -HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
[java] 15:50:02,700 INFO TransactionFactoryInitiator:62 -HHH000399: Using default transaction strategy (direct JDBC transactions)
[java] 15:50:02,705 INFO ASTQueryTranslatorFactory:47 -HHH000397: Using ASTQueryTranslatorFactory
[java] Exception in thread "main" java.lang.Exception: Transaction failed
[java] at org.owls.ht.CreateTest.main(CreateTest.java:50)
[java] Caused by: org.hibernate.exception.GenericJDBCException: could not prepare statement
[java] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
[java] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:196)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:122)
[java] at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:55)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558)
[java] at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98)
[java] at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:492)
[java] at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:197)
[java] at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181)
[java] at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:334)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
[java] at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
[java] at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
[java] at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
[java] at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
[java] at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
[java] at org.owls.ht.CreateTest.main(CreateTest.java:36)
[java] Caused by: java.sql.SQLException: This function is not supported
[java] at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.Util.notSupported(Unknown Source)
[java] at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.doPrepare(StatementPreparerImpl.java:124)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)
[java] ... 22 more
[java] Hibernate: insert into TRACK (TRACK_ID, title, filePath, playTime, added, volume) values (null, ?, ?, ?, ?, ?)
[java] 15:50:03,322 WARN SqlExceptionHelper:144 -SQL Error: -20, SQLState: IM001
[java] 15:50:03,323 ERROR SqlExceptionHelper:146 -This function is not supported
我有 2 个可疑部分。
- 在邮件中间
[java] 15:50:02,004 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
。为什么 session 工厂为空?
[java] Hibernate: insert into TRACK (TRACK_ID, title, filePath, playTime, added, volume) values (null, ?, ?, ?, ?, ?)
。这段代码似乎试图将空值放入 ID 字段。但是,因为我输入了 <generator class="native"/>
,所以它不应该为空。对吧?
感谢您的回答:D
这不是答案,但有字符限制。
//=== 已编辑 #1
我已经更改了 hsqldb
的依赖项并且更改了错误消息。
我已经提到了这个帖子:error in script file line: 1 Unexpected token UNIQUE, requires COLLATION in statement [SET DATABASE UNIQUE]
前代码在这里(它是build.xml
的一部分)
<dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.10"/>
这是新的。
<dependency groupId="org.hsqldb" artifactId="hsqldb" version="2.3.3"/>
现在,似乎构建成功了,但仍然遇到连接问题。
日志如下。
Buildfile: /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/build.xml
prepare:
codegen:
[hibernatetool] Executing Hibernate Tool with a Standard Configuration
[hibernatetool] 1. task: hbm2java (Generates a set of .java files)
[hibernatetool] SLF4J: The requested version 1.6.99 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
[hibernatetool] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
[hibernatetool] 16:38:13,283 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[hibernatetool] 16:38:13,303 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[hibernatetool] 16:38:13,308 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[hibernatetool] 16:38:13,309 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[hibernatetool] 16:38:13,353 INFO Configuration:2133 -HHH000042: Configuring from file: hibernate.cfg.xml
[hibernatetool] 16:38:13,408 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:13,448 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[hibernatetool] 16:38:13,535 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:13,624 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[hibernatetool] 16:38:13,951 INFO Version:15 -Hibernate Tools 4.3.1
prepare:
schema:
[hibernatetool] Executing Hibernate Tool with a Standard Configuration
[hibernatetool] 1. task: hbm2ddl (Generates database schema)
[hibernatetool] 16:38:14,618 INFO Configuration:2133 -HHH000042: Configuring from file: hibernate.cfg.xml
[hibernatetool] 16:38:14,621 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:14,626 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[hibernatetool] 16:38:14,631 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:14,653 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[hibernatetool] 16:38:14,869 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[hibernatetool] 16:38:14,878 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[hibernatetool] 16:38:14,879 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[hibernatetool] 16:38:14,879 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[hibernatetool] 16:38:14,883 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[hibernatetool] 16:38:15,963 INFO Dialect:145 -HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
[hibernatetool] 16:38:16,018 INFO SchemaExport:344 -HHH000227: Running hbm2ddl schema export
[hibernatetool] 16:38:16,019 DEBUG SchemaExport:354 -Import file not found: /import.sql
[hibernatetool] Hibernate: drop table TRACK if exists
[hibernatetool] drop table TRACK if exists;
[hibernatetool] Hibernate: create table TRACK (TRACK_ID integer generated by default as identity (start with 1), title varchar(255) not null, filePath varchar(255) not null, playTime time, added date, volume smallint not null, primary key (TRACK_ID))
[hibernatetool] create table TRACK (TRACK_ID integer generated by default as identity (start with 1), title varchar(255) not null, filePath varchar(255) not null, playTime time, added date, volume smallint not null, primary key (TRACK_ID));
[hibernatetool] 16:38:16,031 INFO SchemaExport:406 -HHH000230: Schema export complete
prepare:
compile:
[javac] Compiling 2 source files to /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/classpath
ctest:
[java] 16:38:18,171 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[java] 16:38:18,186 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[java] 16:38:18,191 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[java] 16:38:18,200 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[java] 16:38:18,258 INFO Configuration:2075 -HHH000043: Configuring from resource: /hibernate.cfg.xml
[java] 16:38:18,258 INFO Configuration:2094 -HHH000040: Configuration resource: /hibernate.cfg.xml
[java] 16:38:18,367 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 16:38:18,417 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[java] 16:38:18,496 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 16:38:18,567 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[java] 16:38:18,774 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[java] 16:38:18,779 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[java] 16:38:18,779 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[java] 16:38:18,780 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[java] 16:38:18,782 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[java] Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convert(BasicConnectionCreator.java:122)
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58)
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
[java] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
[java] at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
[java] at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
[java] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
[java] at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
[java] at org.owls.ht.CreateTest.main(CreateTest.java:30)
[java] Caused by: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@6d7cf6af[file =/Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/data/music.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-07-13 07:38:28 heartbeat - read: -2877 ms.
[java] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
[java] ... 14 more
[java] Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@6d7cf6af[file =/Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/data/music.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-07-13 07:38:28 heartbeat - read: -2877 ms.
[java] at org.hsqldb.error.Error.error(Unknown Source)
[java] at org.hsqldb.error.Error.error(Unknown Source)
[java] at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
[java] at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
[java] at org.hsqldb.persist.Logger.open(Unknown Source)
[java] at org.hsqldb.Database.reopen(Unknown Source)
[java] at org.hsqldb.Database.open(Unknown Source)
[java] at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
[java] at org.hsqldb.DatabaseManager.newSession(Unknown Source)
[java] ... 18 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 19 seconds
这是所有这些问题的总结。
this function is not supported
--> 我不确定为什么,但我可以通过... a
解决。从构建路径中删除 Maven 存储库(我强制包含它,因为我想在 eclipse 中使用自动完成功能)。 b
。将 hsqlsb 依赖版本从 1.8.0.10
更改为 2.3.3
(注意我也更改了 groupId
)。
Error calling Driver#connect
--> 当有超过 2 个 hsqldb 实例时会发生这种情况。(这个很确定)当我在终端中键入 ps -ef | grep 'java'
时,我可以确认有 2 个 hsqldb 进程.在我杀死那些之后,ant build 成功了。
谢谢。即使我得到了答案,但我仍然希望对这个问题有更具体的答案。如果发布更好的答案,我会选择那个:D
我正在尝试构建一个 Hibernate 项目。 我的问题就像标题一样。我有一个休眠映射 xml 和 class 由ant进程构建。
而且我还想让你看看我的配置文件dtd。在国内,很少有人用这个框架,所以这里没有太多参考。(我看了一本2009年出版的书,它的目标是hibernate3.X)
我将附上我的 ant 构建文件、配置文件、映射文件、执行文件和错误日志。
这是我的build.xml
(蚂蚁)
<?xml version="1.0" encoding="UTF-8"?>
<project name="HibernateEx2" default="db" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property name="source.root" value="src"/>
<property name="class.root" value="classpath"/>
<property name="data.dir" value="data"/>
<artifact:dependencies pathId="dependency.classpath">
<dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.10"/>
<dependency groupId="org.hibernate" artifactId="hibernate-core" version="4.3.10.Final">
<exclusion groupId="javax.transaction" artifactId="jta"/>
</dependency>
<!-- 3.2.4.GA - After hibernate4 need upgrade hibernate-tools -->
<dependency groupId="org.hibernate" artifactId="hibernate-tools" version="4.3.1.CR1"/>
<dependency groupId="org.apache.geronimo.specs" artifactId="geronimo-jta_1.1_spec" version="1.1.1"/>
<!-- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory -->
<dependency groupId="commons-logging" artifactId="commons-logging" version="1.2"/>
<dependency groupId="log4j" artifactId="log4j" version="1.2.17"/>
<!-- java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder -->
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.7.12"/>
</artifact:dependencies>
<path id="project.class.path">
<pathelement location="${class.root}"/>
<path refid="dependency.classpath" />
</path>
<!-- Explaining how to use hibernate -->
<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.class.path"/>
<target name="db" description="Run HSQLDB database management UI against the database file -- use when application is not running">
<java classname="org.hsqldb.util.DatabaseManager" fork="yes">
<classpath refid="project.class.path"/>
<arg value="-driver"/>
<arg value="org.hsqldb.jdbcDriver"/>
<arg value="-url"/>
<arg value="jdbc:hsqldb:${data.dir}/music/"/>
<arg value="-user"/>
<arg value="sa"/>
</java>
</target>
<target name="print-classpath" description="Show the dependency class path">
<property name="class.path" refid="dependency.classpath"/>
<echo>${class.path}</echo>
</target>
<!-- Generate java code -->
<target name="codegen" description="Generate Java source from the OR mapping files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2java/>
</hibernatetool>
</target>
<!-- Creating Sub drectories -->
<target name="prepare" description="Set up build structures">
<mkdir dir="${class.root}"/>
<copy todir="${class.root}">
<fileset dir="${source.root}">
<include name="**/*.properties"/>
<include name="**/*.xml"/>
</fileset>
</copy>
</target>
<!-- Creating Schema for mapping files -->
<target name="schema" depends="prepare" description="Generate DB schema from the OR mappinf files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2ddl drop="yes"/>
</hibernatetool>
</target>
<!-- Compile Java -->
<!-- added includeantruntime="false" to javac, since terminal compile warning -->
<target name="compile" depends="prepare" description="Compiles all java classes">
<javac srcdir="${source.root}" destdir="${class.root}"
debug="on" optimize="off" deprecation="on" includeantruntime="true">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="ctest" depends="compile" description="Creates and persists some sample data">
<java classname="org.owls.ht.CreateTest" fork="true">
<classpath refid="project.class.path"/>
</java>
</target>
<target name="qtest" description="Run a simple Hibernate query" depends="compile">
<java classname="org.owls.ht.QueryTest" fork="true">
<classpath refid="project.class.path"/>
</java>
</target>
</project>
休眠配置文件 hibernate.cfg.xml
。使用 3.0 DTD 看起来非常可疑,而我的项目包括 hibernate-core 4.3.10.final
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration >
<session-factory>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:data/music</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.shutdown">true</property>
<!-- Connection Pool -->
<property name="connection.pool_size">1</property>
<!-- Hibernate Session Manager Activate -->
<property name="current_session_context_class">thread</property>
<!-- Unable Cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Batch service unable -->
<property name="jdbc.batch_size">0</property>
<property name="show_sql">true</property>
<!-- Mapping documents -->
<mapping resource="org/owls/ht/data/Track.hbm.xml"/>
</session-factory>
</hibernate-configuration>
映射文件。我认为这 id
部分不起作用,尤其是 <generator="native"/>
部分。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiberbate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.owls.ht.data.Track" table="TRACK">
<meta attribute="class-description">
Playable Track list
@author juneyoungoh
</meta>
<id name="id" type="int" column="TRACK_ID">
<meta attribute="scope-set">protected</meta>
<generator class="native"/>
</id>
<property name="title" type="string" not-null="true"/>
<property name="filePath" type="string" not-null="true"/>
<property name="playTime" type="time">
<meta attribute="field-description">Duration</meta>
</property>
<property name="added" type="date">
<meta attribute="field-description">Created</meta>
</property>
<property name="volume" type="short" not-null="true">
<meta attribute="field-description">Volume</meta>
</property>
</class>
</hibernate-mapping>
这是输出,Track.java
package org.owls.ht.data;
// Generated Jul 13, 2015 3:47:01 PM by Hibernate Tools 4.3.1
import java.util.Date;
/**
* Playable Track list
* @author juneyoungoh
*
*/
public class Track implements java.io.Serializable {
private int id;
private String title;
private String filePath;
/**
* Duration
*/
private Date playTime;
/**
* Created
*/
private Date added;
/**
* Volume
*/
private short volume;
public Track() {
}
public Track(String title, String filePath, short volume) {
this.title = title;
this.filePath = filePath;
this.volume = volume;
}
public Track(String title, String filePath, Date playTime, Date added, short volume) {
this.title = title;
this.filePath = filePath;
this.playTime = playTime;
this.added = added;
this.volume = volume;
}
public int getId() {
return this.id;
}
protected void setId(int id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFilePath() {
return this.filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
/**
* * Duration
*/
public Date getPlayTime() {
return this.playTime;
}
public void setPlayTime(Date playTime) {
this.playTime = playTime;
}
/**
* * Created
*/
public Date getAdded() {
return this.added;
}
public void setAdded(Date added) {
this.added = added;
}
/**
* * Volume
*/
public short getVolume() {
return this.volume;
}
public void setVolume(short volume) {
this.volume = volume;
}
}
这是我的测试 class,其中包含 main
方法。
package org.owls.ht;
import java.sql.Time;
import java.util.Date;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.owls.ht.data.Track;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
public class CreateTest {
private static Track makingTrack(String title, String filePath, Date playTime){
Track tmp = new Track(title, filePath, playTime, new Date(), (short)0);
return tmp;
}
public static void main(String[] args) throws Exception {
Configuration config = new Configuration();
config.configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save(makingTrack("Russian Trance"
, "vol2/album610/track02.mp3", Time.valueOf("00:03:30")));
session.save(makingTrack("Video Killed the Radio Star"
, "vol2/album611/track12.mp3", Time.valueOf("00:03:49")));
session.save(makingTrack("Gravity's Angel"
, "vol2/album175/track03.mp3", Time.valueOf("00:06:06")));
tx.commit();
} catch (Exception e){
if(tx != null) {
tx.rollback();
}
throw new Exception("Transaction failed", e);
} finally{
session.close();
}
sessionFactory.close();
}
};
//===============================
终于!这是我通过 ant 命令 运行 此代码时的错误消息。
Buildfile: /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/build.xml
prepare:
compile:
[javac] Compiling 2 source files to /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/classpath
ctest:
[java] 15:50:01,618 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[java] 15:50:01,643 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[java] 15:50:01,651 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[java] 15:50:01,656 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[java] 15:50:01,693 INFO Configuration:2075 -HHH000043: Configuring from resource: /hibernate.cfg.xml
[java] 15:50:01,693 INFO Configuration:2094 -HHH000040: Configuration resource: /hibernate.cfg.xml
[java] 15:50:01,814 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 15:50:01,882 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[java] 15:50:01,938 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 15:50:02,004 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[java] 15:50:02,190 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[java] 15:50:02,193 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[java] 15:50:02,194 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[java] 15:50:02,194 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[java] 15:50:02,196 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[java] 15:50:02,585 INFO Dialect:145 -HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
[java] 15:50:02,607 INFO LobCreatorBuilder:97 -HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
[java] 15:50:02,700 INFO TransactionFactoryInitiator:62 -HHH000399: Using default transaction strategy (direct JDBC transactions)
[java] 15:50:02,705 INFO ASTQueryTranslatorFactory:47 -HHH000397: Using ASTQueryTranslatorFactory
[java] Exception in thread "main" java.lang.Exception: Transaction failed
[java] at org.owls.ht.CreateTest.main(CreateTest.java:50)
[java] Caused by: org.hibernate.exception.GenericJDBCException: could not prepare statement
[java] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
[java] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:196)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:122)
[java] at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:55)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558)
[java] at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98)
[java] at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:492)
[java] at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:197)
[java] at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181)
[java] at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:334)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
[java] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
[java] at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
[java] at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
[java] at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
[java] at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
[java] at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
[java] at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
[java] at org.owls.ht.CreateTest.main(CreateTest.java:36)
[java] Caused by: java.sql.SQLException: This function is not supported
[java] at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.Util.notSupported(Unknown Source)
[java] at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.doPrepare(StatementPreparerImpl.java:124)
[java] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)
[java] ... 22 more
[java] Hibernate: insert into TRACK (TRACK_ID, title, filePath, playTime, added, volume) values (null, ?, ?, ?, ?, ?)
[java] 15:50:03,322 WARN SqlExceptionHelper:144 -SQL Error: -20, SQLState: IM001
[java] 15:50:03,323 ERROR SqlExceptionHelper:146 -This function is not supported
我有 2 个可疑部分。
- 在邮件中间
[java] 15:50:02,004 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
。为什么 session 工厂为空? [java] Hibernate: insert into TRACK (TRACK_ID, title, filePath, playTime, added, volume) values (null, ?, ?, ?, ?, ?)
。这段代码似乎试图将空值放入 ID 字段。但是,因为我输入了<generator class="native"/>
,所以它不应该为空。对吧?
感谢您的回答:D
这不是答案,但有字符限制。
//=== 已编辑 #1
我已经更改了 hsqldb
的依赖项并且更改了错误消息。
我已经提到了这个帖子:error in script file line: 1 Unexpected token UNIQUE, requires COLLATION in statement [SET DATABASE UNIQUE]
前代码在这里(它是build.xml
的一部分)
<dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.10"/>
这是新的。
<dependency groupId="org.hsqldb" artifactId="hsqldb" version="2.3.3"/>
现在,似乎构建成功了,但仍然遇到连接问题。 日志如下。
Buildfile: /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/build.xml
prepare:
codegen:
[hibernatetool] Executing Hibernate Tool with a Standard Configuration
[hibernatetool] 1. task: hbm2java (Generates a set of .java files)
[hibernatetool] SLF4J: The requested version 1.6.99 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
[hibernatetool] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
[hibernatetool] 16:38:13,283 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[hibernatetool] 16:38:13,303 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[hibernatetool] 16:38:13,308 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[hibernatetool] 16:38:13,309 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[hibernatetool] 16:38:13,353 INFO Configuration:2133 -HHH000042: Configuring from file: hibernate.cfg.xml
[hibernatetool] 16:38:13,408 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:13,448 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[hibernatetool] 16:38:13,535 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:13,624 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[hibernatetool] 16:38:13,951 INFO Version:15 -Hibernate Tools 4.3.1
prepare:
schema:
[hibernatetool] Executing Hibernate Tool with a Standard Configuration
[hibernatetool] 1. task: hbm2ddl (Generates database schema)
[hibernatetool] 16:38:14,618 INFO Configuration:2133 -HHH000042: Configuring from file: hibernate.cfg.xml
[hibernatetool] 16:38:14,621 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:14,626 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[hibernatetool] 16:38:14,631 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[hibernatetool] 16:38:14,653 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[hibernatetool] 16:38:14,869 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[hibernatetool] 16:38:14,878 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[hibernatetool] 16:38:14,879 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[hibernatetool] 16:38:14,879 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[hibernatetool] 16:38:14,883 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[hibernatetool] 16:38:15,963 INFO Dialect:145 -HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
[hibernatetool] 16:38:16,018 INFO SchemaExport:344 -HHH000227: Running hbm2ddl schema export
[hibernatetool] 16:38:16,019 DEBUG SchemaExport:354 -Import file not found: /import.sql
[hibernatetool] Hibernate: drop table TRACK if exists
[hibernatetool] drop table TRACK if exists;
[hibernatetool] Hibernate: create table TRACK (TRACK_ID integer generated by default as identity (start with 1), title varchar(255) not null, filePath varchar(255) not null, playTime time, added date, volume smallint not null, primary key (TRACK_ID))
[hibernatetool] create table TRACK (TRACK_ID integer generated by default as identity (start with 1), title varchar(255) not null, filePath varchar(255) not null, playTime time, added date, volume smallint not null, primary key (TRACK_ID));
[hibernatetool] 16:38:16,031 INFO SchemaExport:406 -HHH000230: Schema export complete
prepare:
compile:
[javac] Compiling 2 source files to /Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/classpath
ctest:
[java] 16:38:18,171 INFO Version:66 -HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[java] 16:38:18,186 INFO Version:54 -HHH000412: Hibernate Core {4.3.10.Final}
[java] 16:38:18,191 INFO Environment:224 -HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.HSQLDialect, hibernate.connection.shutdown=true, hibernate.connection.url=jdbc:hsqldb:data/music, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
[java] 16:38:18,200 INFO Environment:346 -HHH000021: Bytecode provider name : javassist
[java] 16:38:18,258 INFO Configuration:2075 -HHH000043: Configuring from resource: /hibernate.cfg.xml
[java] 16:38:18,258 INFO Configuration:2094 -HHH000040: Configuration resource: /hibernate.cfg.xml
[java] 16:38:18,367 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 16:38:18,417 INFO Configuration:759 -HHH000221: Reading mappings from resource: org/owls/ht/data/Track.hbm.xml
[java] 16:38:18,496 WARN DTDEntityResolver:75 -HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
[java] 16:38:18,567 INFO Configuration:2216 -HHH000041: Configured SessionFactory: null
[java] 16:38:18,774 WARN DriverManagerConnectionProviderImpl:93 -HHH000402: Using Hibernate built-in connection pool (not for production use!)
[java] 16:38:18,779 INFO DriverManagerConnectionProviderImpl:166 -HHH000401: using driver [org.hsqldb.jdbcDriver] at URL [jdbc:hsqldb:data/music]
[java] 16:38:18,779 INFO DriverManagerConnectionProviderImpl:175 -HHH000046: Connection properties: {user=sa, password=****, shutdown=true}
[java] 16:38:18,780 INFO DriverManagerConnectionProviderImpl:180 -HHH000006: Autocommit mode: false
[java] 16:38:18,782 INFO DriverManagerConnectionProviderImpl:102 -HHH000115: Hibernate connection pool size: 1 (min=1)
[java] Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convert(BasicConnectionCreator.java:122)
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58)
[java] at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
[java] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
[java] at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
[java] at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
[java] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
[java] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
[java] at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
[java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
[java] at org.owls.ht.CreateTest.main(CreateTest.java:30)
[java] Caused by: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@6d7cf6af[file =/Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/data/music.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-07-13 07:38:28 heartbeat - read: -2877 ms.
[java] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
[java] at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
[java] at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
[java] ... 14 more
[java] Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@6d7cf6af[file =/Users/juneyoungoh/Documents/workplaceJava1/HibernateEx3/data/music.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-07-13 07:38:28 heartbeat - read: -2877 ms.
[java] at org.hsqldb.error.Error.error(Unknown Source)
[java] at org.hsqldb.error.Error.error(Unknown Source)
[java] at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
[java] at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
[java] at org.hsqldb.persist.Logger.open(Unknown Source)
[java] at org.hsqldb.Database.reopen(Unknown Source)
[java] at org.hsqldb.Database.open(Unknown Source)
[java] at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
[java] at org.hsqldb.DatabaseManager.newSession(Unknown Source)
[java] ... 18 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 19 seconds
这是所有这些问题的总结。
this function is not supported
--> 我不确定为什么,但我可以通过...a
解决。从构建路径中删除 Maven 存储库(我强制包含它,因为我想在 eclipse 中使用自动完成功能)。b
。将 hsqlsb 依赖版本从1.8.0.10
更改为2.3.3
(注意我也更改了groupId
)。Error calling Driver#connect
--> 当有超过 2 个 hsqldb 实例时会发生这种情况。(这个很确定)当我在终端中键入ps -ef | grep 'java'
时,我可以确认有 2 个 hsqldb 进程.在我杀死那些之后,ant build 成功了。
谢谢。即使我得到了答案,但我仍然希望对这个问题有更具体的答案。如果发布更好的答案,我会选择那个:D