我用javaDB和hibernate就出下面的错误,同样的代码,换成oracle就好用了,不过主键生成方式由javaDB的自动生成变成oracle的序列填充了,请问这是什么原因呢
----------------------
08:46:37,437 ERROR JDBCExceptionReporter:101 - 表/视图“HIBERNATE_UNIQUE_KEY”不存在。
 Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not get or update next value
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.engine.TransactionHelper$1Work.doWork(TransactionHelper.java:64)
at org.hibernate.engine.transaction.Isolater$JdbcDelegate.delegateWork(Isolater.java:211)
at org.hibernate.engine.transaction.Isolater.doIsolatedWork(Isolater.java:67)
at org.hibernate.engine.TransactionHelper.doWorkInNewTransaction(TransactionHelper.java:74)
at org.hibernate.id.TableGenerator.generate(TableGenerator.java:118)
at org.hibernate.id.TableHiLoGenerator.generate(TableHiLoGenerator.java:84)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at Test.test(Test.java:35)
at Test.main(Test.java:21)
Caused by: java.sql.SQLSyntaxErrorException: 表/视图“HIBERNATE_UNIQUE_KEY”不存在。
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
at org.hibernate.id.TableGenerator.doWorkInCurrentTransaction(TableGenerator.java:156)
at org.hibernate.engine.TransactionHelper$1Work.doWork(TransactionHelper.java:61)
... 16 more
Caused by: org.apache.derby.client.am.SqlException: 表/视图“HIBERNATE_UNIQUE_KEY”不存在。
at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)
at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)
at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)
... 19 more
----------------------------------
create table ROLES(
ID   bigint primary key GENERATED ALWAYS AS IDENTITY,  -- 自动生成主键
ROLE_NAME  varchar(50) not null unique -- 工作角色名称
);
---------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.donna.model.Role" table="ROLES" schema="DONNA">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="ROLE_NAME" length="50" not-null="true" unique="true" />
        </property>
    </class>
</hibernate-mapping>

解决方案 »

  1.   

    <property name="dialect">
    org.hibernate.dialect.SQLServerDialect
    </property>
    <property name="connection.url">
    jdbc:sqlserver://localhost:1433;databaseName=testDB
    </property>
    <property name="connection.username">sa</property>
    <property name="connection.password">sa</property>
    <property name="connection.driver_class">
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    </property>你连oracle成功  连sql不成功
    你的url写的是对的吗?   
    报错信息说表或视图不存在呢
      

  2.   

    javaDB和oracle的连接都没有问题的
      

  3.   

    再问个小问题,javaDB是否支持序列呢?
    如果支持,写法是什么样子的呢
      

  4.   

    在plsql中,用当前用户登录,执行
    create sequence HIBERNATE_UNIQUE_KEY
    minvalue 1
    maxvalue 99999999999999999999
    start with 121
    increment by 1
    cache 20;
      

  5.   

    找到原因了,把主键生成方式改成identity就好了