2012-02-23 2 views
3

최대 절전 모드에서 새로운 기능입니다. 데이터베이스에서 Friend_Job 개체를 저장하려고 할 때 예외가 발생합니다.최대 절전 모드 : - JDBC 일괄 업데이트를 실행할 수 없습니다.

데이터베이스에서 Friend 및 Job 개체를 가져오고 새 Frien_Job 개체를 만듭니다.

Test.java

SessionFactory sessionFectory = new Configuration().configure().buildSessionFactory(); 
    Session session = sessionFectory.openSession(); 
    Transaction transaction = session.beginTransaction(); 
    Friend friend= (Friend) session.load(Friend.class, new Integer(1)); 
    Job job = (Job) session.load(Job.class, new Integer(3)); 
    Friend_Job friend_Job = new Friend_Job(); 
    friend_Job.setFriend(friend); 
    friend_Job.setJob(job); 
    friend_Job.setCompanyName(job.getCompanyName()); 
    session.save(friend_Job); 
    transaction.commit(); //Exception here 

Friend_Job.hbm.xml

<hibernate-mapping> 
<class name="hibernateTest.Friend_Job" table="FRIEND_JOB"> 
    <id name="primaryKey" column="PRIMARY_KEY"> 
     <generator class="increment"/> 
    </id> 
    <property name="companyName" type="string" column="COMPANY_NAME"/> 
    <property name="salary" column="SALARY"/> 
    <many-to-one name="friend" class="hibernateTest.Friend" cascade="none" column="FK_FRIEND_ID"/> 
    <many-to-one name="job" class="hibernateTest.Job" cascade="none" column="FK_JOB_ID"/> 
</class> 
</hibernate-mapping> 

예외 : - : java.sql.BatchUpdateException : ORA-00932 : 일관성에 의한

org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) 
at hibernateTest.Test.main(Test.java:20) 

데이터 유형 : BINARY의 예상 숫자는 NUMBER입니다.

,210

Friend_Job.java

다른
public class Friend_Job { 

private int primaryKey; 
private String companyName; 
private int salary = 0; 
private Friend friend; 
private Job job; 

과 세터와 게터 있습니다.

더 많은 정보가 필요하면 알려주십시오 .... 미리 감사드립니다.

+0

를 만들어 내가 극복 null 값을 보여주는 생성한다? – Firo

+0

@Firo : - 열 유형 바이너리가 없으므로이 예외가 throw되는 이유를 알 수 없습니다. –

답변

1

이동 확인

hibernate.cfg.xml
<property name="hbm2ddl.auto">create</property>
다음 "업데이트"기본 문자열 크기 문자로 coused
<property name="hbm2ddl.auto">update</property>

0

이 오류가
두가 변경 만들이있는 경우 이 문제를 해결하기위한 선택
1. 문자열 최대 문자 크기
예를

<property name="companyname" column="company_name" length='25' /> 

당신의 COMPANYNAME 크기가 작은 25
2. 변경 유형은 예외 예를 이유

<property name="companyname" column="company_name" type='text' /> 
0
Thera are 2 possibilities : 
    1. Primary key issue. You are inserting the same value 2 times. 
    2. You are using  
    SessionFactory factory=new AnnotationConfiguration().configure().buildSessionFactory(); 
    for creating sessionfactory OBJECT. It used for mysql. 
So use following for oracle DB: 
SessionFactory factory = new Configuration().configure().buildSessionFactory(); 
    for getting session. 
0

하나를 텍스트에 있어야합니다 잘못된 매핑으로 인해 발생할 수 있습니다. 사건이 있었어. 'hbm'파일을 살펴보면 자식 테이블에 Set 매핑이 있는데, 자식 테이블에없는 열 이름을 지정했습니다 (이 열은 테이블에 없습니다). 매핑에서 적절한 열을 지정한 직후에 문제가 해결되었습니다. 다른 이유가있을 수 있지만 지금은 이것이 내가 아는 전부입니다. 도움이되기를 바랍니다.

-1

이 오류는 주로 데이터가 삽입되지 않기 때문에 발생합니다. 다음과 같은 이유로이 문제가 발생할 수 있습니다.

  1. 중복 값으로 인해.
  2. 필수 필드/열이 누락되었습니다.
  3. 잘못된 제약으로 인해.
0

내 문제는 테이블은 SQL이 아니라 데이터베이스 이름을 변경하고 새 테이블`FRIEND_JOB` 유형 바이너리입니다 테이블에 열