2015-12-17 3 views
1

Я столкнулся с проблемами с отображением Hibernate. Я использую базу данных оракула. Пожалуйста, ознакомьтесь с кодом и, пожалуйста, помогите мне в решении этого вопроса.Облицовочные проблемы с org.hibernate.exception.ConstraintViolationException:

Модель класса:

package com.model; 

    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.GeneratedValue; 
    import javax.persistence.GenerationType; 
    import javax.persistence.Id; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.ManyToOne; 
    import javax.persistence.Table; 

    @Entity 
    @Table(name="emp") 
    public class Employee { 

     @Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     @Column(name="eno") 
     int empid; 

     @Column(name="name") 
     String name; 

     @ManyToOne() 
     @JoinColumn(name="deptid",nullable=false) 
     Department dept; 

     public int getEmpid() { 
      return empid; 
     } 
     public void setEmpid(int empid) { 
      this.empid = empid; 
     } 
     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
     public Department getDept() { 
      return dept; 
     } 
     public void setDept(Department dept) { 
      this.dept = dept; 
     } 

    } 

package com.model; 

import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name="dept") 
public class Department { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="deptid") 
    int deptid; 

    @Column(name="deptname") 
    String deptname; 

    @OneToMany(mappedBy="dept") 
    Set<Employee> empset; 

    public int getDeptid() { 
     return deptid; 
    } 
    public void setDeptid(int deptid) { 
     this.deptid = deptid; 
    } 
    public String getDeptname() { 
     return deptname; 
    } 
    public void setDeptname(String deptname) { 
     this.deptname = deptname; 
    } 
    public Set<Employee> getEmpset() { 
     return empset; 
    } 
    public void setEmpset(Set<Employee> empset) { 
     this.empset = empset; 
    } 
} 

конфигурация файла:

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

<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> 
     <property name="connection.username">user_name</property> 
     <property name="connection.password">password</property> 

     <property name="connection.pool_size">1</property> 
     <property name="dialect">org.hibernate.dialect.OracleDialect</property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">validate</property> 

    <mapping class="com.model.Employee"/> 
    <mapping class="com.model.Department"/> 

    </session-factory> 
</hibernate-configuration> 

тест Класс:

package com.demo; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 

import com.model.Department; 
import com.model.Employee; 

public class HibernateTest { 

    public static void main(String[] args) { 
     Configuration cfg = new Configuration(); 
     cfg.configure(); 
     SessionFactory sf = cfg.buildSessionFactory(); 
     Session sess = sf.openSession(); 
     Transaction tx = sess.beginTransaction(); 

     Department dept1 = new Department(); 
     dept1.setDeptname("aaa"); 

     sess.save(dept1); 

     Employee emp1 = new Employee(); 
     emp1.setName("aaa"); 
     emp1.setDept(dept1); 

     sess.save(emp1); 
     tx.commit(); 
     sess.close(); 
    } 
} 

дб структура таблицы: создать таблицу EMP (номер Ино (4) первичный ключ , имя varchar2 (10), число дефиниций (5) deuts de de de de de de de de de de de de de de de del (deptid));

создать таблицу emp (дефинированное число (5) первичный ключ, deptname varchar2 (10));

И ошибка я получаю:

Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190) 
    at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:61) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558) 
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:490) 
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:195) 
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:179) 
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:214) 
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702) 
    at com.demo.HibernateTest.main(HibernateTest.java:23) 
Caused by: java.sql.SQLException: ORA-01400: cannot insert NULL into ("VASAVI"."DEPT"."DEPTID") 

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187) 
    ... 21 more 
+0

Можете ли вы проверить DB запросов для создания таблиц? Потому что вы предоставили 2 запроса для создания одной и той же таблицы. Где запрос для создания таблицы 'dept'? – RAS

+0

Извините. По ошибке я дал здесь одно и то же имя. две таблицы находятся в db. @RAS – Monika

ответ

0

Я проверил свои постоянные занятия по базе данных MySQL с моим hibernate.properties. Все работает отлично (без ошибок). Так что, я думаю, вам необходимо восстановить схему базы данных с

<property name="hbm2ddl.auto">create</property> 
0

Эта ошибка всегда появляется, если вы хотите, чтобы вставить строку со значением в колонке, имеющей уникальный индекс или ограничение, и вставленное значение для этого столбец уже существует в другой строке.Создание схемы db. Измените файл конфигурации

<property name="hibernate.hbm2ddl.auto">validate</property> 

в

<property name="hibernate.hbm2ddl.auto">create</property> 
+0

Теперь я получаю другую ошибку: вызвано: java.sql.SQLException: Listener отказался от соединения со следующей ошибкой: ORA-12519, TNS: не найдено соответствующего обработчика службы Дескриптор соединения, используемый клиентом, был : localhost: 1521: XE – Monika

+0

Слушатель не смог найти доступных обработчиков сервисов, подходящих для подключения клиента. Проблема на сервере Oracle: http://ora-12519.ora-code.com/ – Zia

+0

также проверяют количество соединений в конфигурации оракула. – Zia

Смежные вопросы