- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在使用 Hibernate-JPA-Maven 时遇到了一些问题
这是我第一次使用 JPA 和 hibernate,我遇到了一些问题:我有一个用 JPA 创建的数据库,我想用 JUnit5 对其进行一些 CRUD 测试。通过 pom.xml,我添加了依赖项以使用 SQLite 方言和 hibernate ,并且我有一个 persistence.xml 文件。我使用 Eclipse 运行项目以查看第一个简单测试是否有效,但我遇到了这个问题:
oct. 28, 2017 2:42:32 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: Bla ...] oct. 28, 2017 2:42:32 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.2.12.Final} oct. 28, 2017 2:42:32 PM org.hibernate.cfg.Environment INFO: HHH000206: hibernate.properties not found oct. 28, 2017 2:42:32 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.sqlite.JDBC] at URL [jdbc:sqlite::memory:] oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {charSet=UTF-8, password=****, user=test} oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections INFO: HHH000115: Hibernate connection pool size: 20 (min=1) oct. 28, 2017 2:42:33 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService WARN: HHH000342: Could not obtain connection to query metadata : Unable to determine Dialect to use [name=SQLite, majorVersion=3]; user must register resolver or explicitly set 'hibernate.dialect' Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at . . . Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at . . . ... 14 more
所以我试着找出为什么我有:
WARN: HHH000342: Could not obtain connection to query metadata : Unable to determine Dialect to use [name=SQLite, majorVersion=3]; user must register resolver or explicitly set 'hibernate.dialect'
显然这是因为 SQLite 3 和 Hibernate 5 不兼容,所以我试试这个:Does Hibernate Fully Support SQLite但它对我不起作用。
然后我尝试使用较低版本的 hibernate 并在我的 pom.xml 中将 hibernate 版本和 hibernate-core 版本修改为 4.3.11.Final 但同样,它并没有解决我的问题。
经过几个小时后,我无法弄清楚问题是来自 hibernate 和 SQLite 的版本,还是我的 pom.xml 中的配置问题(缺少依赖项?)或者它是我的 persistance.xml,或者这来 self 的类测试。
如果您需要更多详细信息,请告诉我。预先感谢您的帮助。
我的 pom.xml 文件:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.umlv.orthopro</groupId>
<artifactId>OrthoPro_brain</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>OrthoPro_brain</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>9</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.jupiter.version>5.0.1</junit.jupiter.version>
<junit.platform.version>1.0.1</junit.platform.version>
<hibernate.version>5.2.12.Final</hibernate.version>
<sqlite.version>3.20.1</sqlite.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<reportOutputDirectory>${project.build.directory}/javadoc</reportOutputDirectory>
<destDir>javadoc</destDir>
<nohelp>true</nohelp>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>${sqlite.version}</version>
<!-- <scope>test</scope> -->
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.12.Final</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</project>
我的 persistence.xml 文件:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="first_test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>fr.umlv.orthpro.db.User</class>
<class>fr.umlv.orthpro.db.Rule</class>
<class>fr.umlv.orthpro.db.UserRule</class>
<class>fr.umlv.orthpro.db.Sentence</class>
<properties>
<property name="dialect" value="org.hibernate.dialect.SQLiteDialect" />
<property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC" />
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite::memory:" />
<property name="javax.persistence.jdbc.user" value="test" />
<property name="javax.persistence.jdbc.password" value="test" />
<property name="hibernate.show_sql" value="true" />
<property name="format_sql" value="true" />
<property name="hibernate.connection.charSet" value="UTF-8" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
这是我在数据库上运行测试的类:
package fr.umlv.orthopro.db;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Test {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "first_test" );
EntityManager entitymanager = emfactory.createEntityManager( );
entitymanager.getTransaction( ).begin( );
User quentin = new User( );
quentin.setId(1201);
quentin.setAdmin(false);
entitymanager.persist( quentin );
entitymanager.getTransaction( ).commit( );
entitymanager.close( );
emfactory.close( );
}
}
编辑:我改变
<property name="dialect" value="org.hibernate.dialect.SQLiteDialect" />
到
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect" />
现在我有了这个:
Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]
最佳答案
我使用 SQLite 3.10 和 Hibernate 5.2,配置如下:
pom.xml:
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.12.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.20.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zsoltfabok/sqlite-dialect -->
<dependency>
<groupId>com.zsoltfabok</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>1.0</version>
</dependency>
持久性.xml:
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="first_test" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect" />
<property name="hibernate.connection.driver_class" value="org.sqlite.JDBC" />
<property name="hibernate.connection.username" value="" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.user" value="" />
<property name="hibernate.connection.autocommit" value="true"/>
<property name="hibernate.connection.url" value="jdbc:sqlite:sqlite.db"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.flushMode" value="ALWAYS" />
<property name="hibernate.cache.use_second_level_cache" value="false" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
<!-- create https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html -->
<property name="hibernate.hbm2ddl.auto" value="validate or create" />
</properties>
</persistence-unit>
</persistence>
当然,您必须根据需要更改 hibernate.connection.url
和 hibernate.hbm2ddl.auto
的值以及其他属性。
关于java - 方言 SQLite 3 与 Hibernate 5 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990525/
Hibernate是独立于数据库的。因此,无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言。 例如,假设我们正在使用MySQL数据库,那么我们需要下面的方言: org.hibe
我正在使用 Hibernate 从 sql server 2008 访问数据。同时执行以下代码 Session session = sessionFactory.openSession(); Stri
我的 PostgreSQL 版本是10.5。 hibernate.version 4.3.8.Final 的正确 Hibernate 方言是什么? 请注意,问题是关于正确的 Hibernate Dia
Hibernate 可以选择自动检测 hibernate.dialect .如何检索该自动检测到的值?我无法找到有关此的任何信息。 最佳答案 您可以从 SessionFactory 检索它但您需要将其
我对 Sequelize 还很陌生,虽然我以前在 Node 上工作过,但我没有使用任何 ORM 框架。目前我正在使用新的 SQL DB(sequelize 不支持)并希望通过对现有方言进行原型(pro
我遇到了一个奇怪的问题,目前无法解决。 今天我无法再启动我的 grails 应用程序。应用程序代码没有改变,上周运行顺利。 这是输出: | Loading Grails 2.0.3 | Configu
我是 Hibernate 新手。在阅读 Hibernate 时,我遇到了 Dialect 属性。无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数
对于用 Python 编写 Lisp 方言/解释器,您有什么建议吗?我想从几个基本命令开始,例如 set、print 和 define 或其他命令。 最佳答案 Python 中有一个功能齐全的 Sch
是否有任何 Lisp 或 scheme 方言可以很好地支持数组和线性代数操作。我所说的良好支持并不是指 BLAS/LAPACk 的接口(interface),而是语言本身的高效数组原语。比如说,如果它
我在 PhpStorm 中总是遇到这样的问题,即我的 PDO 准备语句带有下划线,显示为“在主题类中找不到方法‘(ex.execute)’”。 是否有可能将 PDO/准备好的语句添加到 PhpStor
在我的应用程序中,我将 Hibernate 与 SQL Server 数据库一起使用,所以我设置了 在我的 persistence.xml 中。 在某些情况下,我想对包含 NULL 的记录进行排序,
我已经实现了 Hibernate's multitenant database architecture ,其中根据租户选择特定的数据库连接。我正在使用 Spring 4.3 和 Hibernate
我有以下 hibernate.cfg.xml NHibernate.Driver.OracleClientDriver User ID=user;Password=passw
在 Vim 中,需要使用\(\) 来对一些字符序列进行分组。其他特价商品也有相同的行为:\{\}。 是否可以将正则表达式样式更改为像在 perl 中一样?如何切换? 反而 \\( 我会 ( ??? 最
我正在使用 Spring 3.2.1、EclipseLink 2.4 和 JPA 2.0 当我使用非默认隔离级别时出现错误。 Exception in thread "main" org.spring
我想从 SWI-Prolog 切换到 Prova - 但似乎比预期的要难: 谓词如 succ()不可用,操作如 Var1+Var2>Var3不工作(显然它必须是 Var3
我正在尝试查询 Firebird 数据库的 SQL 方言(使用嵌入式驱动程序): procedure TFrmFireDACEmbed.BtnGetDBDialectClick(Sender: TOb
任何在 BASIC 环境下长大,后来转向另一种语言的人,都很难习惯使用“(a == b)”而不是“(a = b)”来测试相等性。 是否有一种 BASIC 方言使用“==”运算符进行比较,而不是重载“=
我的应用程序中使用了多个数据库,redshift 就是其中之一。由于使用 hibernate 框架来配置连接,我尝试使用适当的方言进行红移。但是 PostgreSQL9Dialect 和 MySQL5
您知道是否有将 Amazon SimpleDB 与 NHibernate 一起使用的方法吗? LightSpeed seems to be compatible . 最佳答案 NHibernate 更
我是一名优秀的程序员,十分优秀!