1

我正在尝试将 hibernate-shards 与 hibernate 4 一起使用,但我遇到了一个找不到类的错误。当我运行一个尝试写入分片数据库的示例应用程序时,我收到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/engine/SessionFactoryImplementor
at org.hibernate.shards.ShardedConfiguration.buildSessionFactory(ShardedConfiguration.java:251)

这是我的 Maven POM 文件中的相关部分:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.0.0.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>4.0.0.Final</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.18</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-shards</artifactId>
    <version>3.0.0.Beta2</version>
</dependency>

查看 hibernate-core jar 文件,该类的包似乎与 hibernate-shards 所期望的不同。它现在似乎在一个spi目录中。

$ jar tvf lib/hibernate-core-4.0.0.Final.jar  | grep SessionFactoryImplementor
   3049 Wed Dec 14 22:47:16 EST 2011 org/hibernate/engine/spi/SessionFactoryImplementor.class

我发现了另一个问题,使用 hibernate-shards 和 Spring Framework 的人也有类似的问题。我没有使用 Spring,所以我认为该问题的解决方案不会对我有用。


这个问题的答案表明,可以使用 hibernate-shards 的分支来处理最新版本的 hibernate,但是该答案中指向分支的链接现在是一个错误。


我希望从源代码(从 gi​​thub 克隆)编译最新版本的 hibernate-shards 可以解决问题。但是当我使用我这样创建的 hibernate-shards-4.0.0-SNAPSHOT 时,我得到了同样的异常:

# Get the hibernate-shards code
git clone https://github.com/hibernate/hibernate-shards.git
cd hibernate-shards

# Install the gradle build system.  The following commands are for Ubuntu
sudo add-apt-repository ppa:cwchien/gradle
sudo apt-get update
sudo apt-get install gradle

# Compile the hibernate-shards project
gradle :jar :javadoc :sourcesJar
jar cf build/libs/hibernate-shards-4.0.0-SNAPSHOT-javadoc.jar -C build/docs/javadoc/ .

# Install hibernate-shards into maven
mvn install:install-file -DgroupId=org.hibernate -DartifactId=hibernate-shards -Dversion=4.0.0-SNAPSHOT -Dpackaging=jar -Dfile=build/libs/hibernate-shards-4.0.0-SNAPSHOT.jar -Djavadoc=build/libs/hibernate-shards-4.0.0-SNAPSHOT-javadoc.jar -Dsources=build/libs/hibernate-shards-4.0.0-SNAPSHOT-sources.jar

如果我查看 gradle 文件,它是针对 Hibernate 3.6.10.Final 构建的,而不是 Hibernate 4。


在这一点上,休眠分片是否与休眠 4 不兼容?

4

0 回答 0