Vít*_*uza 2 java hibernate classmate
我正在用Hibernate开发一个简单的例子,在任何容器之外使用它.我正在使用Maven,因此配置了JBoss存储库(请参阅https://community.jboss.org/wiki/MavenGettingStarted-Users)并将以下依赖项添加到我的项目的POM中:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.0.CR1</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.170</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我继续配置Hibernate来使用像这样的H2数据库(文件hibernate.cfg.xml):
<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration xmlns="http://www.hibernate.org/xsd/hibernate-configuration">
<session-factory>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.pool_size">1</property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
最后,我为一个简单的联系人类创建了一个POJO,如下所示:
@Entity
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Basic
private String name;
@Basic
private String email;
/* Getters and setters omitted for brevity. */
}
Run Code Online (Sandbox Code Playgroud)
最后,我创建了一个获取会话工厂,会话并最终持久化实体的类.代码如下:
ServiceRegistry registry = new ServiceRegistryBuilder().configure().buildServiceRegistry();
MetadataSources sources = new MetadataSources(registry);
sources.addAnnotatedClass(Contact.class);
Metadata metadata = sources.buildMetadata();
sessionFactory = metadata.buildSessionFactory();
Contact contact = new Contact();
/* Set some attributes. */
Session session = sessionFactory.openSession();
session.save(contact);
session.close();
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,这就是我得到的:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/jandex/Indexer
at org.hibernate.metamodel.source.annotations.AnnotationMetadataSourceProcessorImpl.prepare(AnnotationMetadataSourceProcessorImpl.java:78)
at org.hibernate.metamodel.source.internal.MetadataImpl.prepare(MetadataImpl.java:177)
at org.hibernate.metamodel.source.internal.MetadataImpl.<init>(MetadataImpl.java:162)
at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83)
at org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112)
Run Code Online (Sandbox Code Playgroud)
调查org.hibernate/hibernate-core我添加到项目中的依赖项的POM ,我可以看到它取决于org.jboss/jandex 1.0.3.Final.满足这种依赖性,我现在得到了NoClassDefFoundError: com/fasterxml/classmate/TypeResolver.回到Hibernate的POM,它取决于com.fasterxml/classmate 0.5.4.在我的项目中也满足了依赖性,我终于能够在没有任何NoClassDefFoundErrors的情况下执行代码.
在Hibernate的POM中,jandex和classmate都被定义为test依赖项,这就是为什么它们不会通过Maven的传递依赖性解析功能自动添加到我的项目中.但是,为什么在运行简单代码时需要它们?我究竟做错了什么?
提前感谢任何指针. - Vítor
| 归档时间: |
|
| 查看次数: |
13876 次 |
| 最近记录: |