Hibernate5.1.fianl使用JPA注解方式异常:persistence.Table.indexes()[Ljavax/persistence/Index;

之前开发时我用的是配置文件的方式,实现实体类和数据库中数据的映射关系,后来看到也有注解的方式,也比较方便,就想试试,去Hibernate官网下载了最新版的Hibernate5.1.final版本,直接搭建好环境,进行测试,结果遇到了好几个问题,抛出好几个异常信息。不过逐渐的被解决了。网上对这几个异常处理的解决方案比较少,这里分享一下我是怎么解决的。源码地址:点击打开链接

异常信息

INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
	at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions

(EntityBinder.java:1087)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:767)
	at 

org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntity

Hierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies

(MetadataBuildingProcess.java:222)
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete

(MetadataBuildingProcess.java:265)
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build

(MetadataBuildingProcess.java:83)
	at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
	at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
	at org.hibernate.boot.MetadataSources.buildMetadata(MetadataSources.java:179)
	at com.siti.test.HiberTest.<clinit>(HiberTest.java:26)

解决方案

1.  问题:第一行的这个信息Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4。

    解释:禁用上下文LOB创建JDBC驱动程序的JDBC报道版本[3]小于4,也就是说表明了当前你用的驱动程序版本太低,Hibernate加载后处理信息的时候会发现版本低于要求的版本,这里不是异常但是我感觉需要注意一下。

    解决:下载高本版的连接驱动程序,当然要与数据库版本相匹配。

2. 问题:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

实体类对象的注解部分代码:

@Entity
@Table(name = "user")
public class User {

	private Long userId;
	private String userName;
	private String password;

	public User() {
		super();
	}
	public User(Long userId, String userName, String password) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.password = password;
	}
	@Id
	@GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
	public Long getUserId() {
		return userId;
	}

解决:将实体上面的注解直接改为这样:@Entity(name = "user"),然后就可以了。

程序重要代码:

配置文件:hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="hibernate.connection.url">
		jdbc:mysql://localhost:3306/hiber
	</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">root</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<property name="connection.pool_size">1</property>
	<property name="show_sql">true</property>
	<property name="hibernate.hbm2ddl.auto">update</property>

	<mapping class="com.siti.domain.User"/>
</session-factory>

</hibernate-configuration>

User实体类

package com.siti.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity(name = "user")
public class User {

	private Long userId;
	private String userName;
	private String password;

	public User() {
		super();
	}
	public User(Long userId, String userName, String password) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.password = password;
	}
	@Id
	@GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
	public Long getUserId() {
		return userId;
	}
	public void setUserId(Long userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName
				+ ", password=" + password + "]";
	}

}

测试代码:

package com.siti.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import com.siti.domain.User;

public class HiberTest {

	static SessionFactory sessionFactory = null;
	static {
		final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
		.configure() // configures settings from hibernate.cfg.xml
		.build();
		sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
		/*sessionFactory = new Configuration()
		.configure()
		.buildSessionFactory();*/
	}
	public static void main(String[] args) {

		testInsertUser();
	}
/**
	 * 1. 添加用户
	 * Hibernate: insert into user (userName, password) values (?, ?)
	 */
	public static void testInsertUser(){
		User user = new User();
		user.setUserId(5L);
		user.setUserName("zhangsan");
		user.setPassword("zs");
		Session session = sessionFactory.openSession();
		session.beginTransaction(); // 开启事务
		session.save(user);
		session.getTransaction().commit();// 提交事务
		session.close();
	}

}
时间: 2024-10-09 22:52:20

Hibernate5.1.fianl使用JPA注解方式异常:persistence.Table.indexes()[Ljavax/persistence/Index;的相关文章

spring与hibernate整合配置基于Annotation注解方式管理实务

1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 1 <!-- jdbc连接信息 --> 2 <context:property-placeholder 3 location="classpath:io/shuqi/ssh/spring/transactionalAnnotation/jdbc.properties"/> 使用DBCP数据源配置xml如下 1 <!-- dbcp数据源配置 -->

基于已构建S2SH项目配置全注解方式简化配置文件

如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于已构建struts2项目整合spring+hibernate 这两篇文章熟悉一下. 本文是基于以上两篇文章的基础构建的,以下给出全注解方式配置S2SH项目的参考步骤. 第一步:实体类映射数据库表,简化hibernate通过xml配置文件映射 首先我们新建实体类作为测试,包结构如图所示: 新建User到model包下,实体类字段信息如下所示: package wjt.com.test.model; import javax.pe

Hibernate 多对多 中间表含有其他字段 注解方式实现

需求: 两个实体类:Teacher.class Student.class 中间表包含了一个额外字段:score Teacher.calss id name 1 Mr.zhang 2 Mr.wang Student.class id name 1 Xiaoming 2 Xiaohong 中间表 id teacher_id student_id score 1 1 1 89 2 1 2 90 解决办法: 按照传统的多对多注解实现,中间表是以自身id为默认主键,另外包含了两个实体类的id,共3个字段

MyBtis注解方式注册异常

最近学习MyBatis,学习到注解方式实现增删改查使遇到异常,困惑的很长时间,最终找到解决问题的方法,共勉! 写好注解的接口后注册到配置文件时使用 方式一 <mapper class="com.liuyunlong.mybatis.annotation.UserMapper" /> 问题来了,抛出异常如下: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ##

一个奇怪的异常,SSH使用注解方式

异常信息如下 Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: cn.pb.jbit.tcjc034.entity.Director; nested exception is org.hibernate.MappingException: Unknown entity: cn.pb.jbit.tcjc034.entity.Dire

注解方式实现声明式事务管理

使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制的地方,写上: @Transactional @Transactional注解: 1)应用事务的注解 2)定义到方法上: 当前方法应用spring的声明式事务 3)定义到类上:   当前类的所有的方法都应用Spring声明式事务管理; 4)定义到父类上: 当执行父类的方法时候应用事务. 修改bean

Spring之AOP基本概念及通过注解方式配置AOP

为什么使用AOP 传统方法 AOP前前奏 首先考虑一个问题,假设我们要设计一个计算器,有如下两个需求: - 在程序运行期间追踪正在放生的活动 - 希望计算器只能处理正数的运算 通常我们会用如下代码进行实现: 定义一个接口: public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } 实现类(

在Spring3 MVC中五步配置集成注解方式Hibernate3

最近在搞一个WEB项目,以前在公司做项目用的都是JPA做ORM持久层,这次这个项目是我自己接的,我决定改一下,用Hibernate3来做ORM持久层.于是我网上搜索了Hibernate3怎么配置集成到Spring3 MVC上,发现千奇百怪,而且很多都是不是基于注解方式配置,显然那些文字上面的配置方式已经跟如今的Hibernate3注解支持方式脱节了,于是我决定自己搞一把,首先说一下网上那些配置方式的不好的地方,很多文章都提到要jdbc.properties文件与Hibernate config文

Spring 使用注解方式进行事务管理

使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation