2017-03-08 12 views
0

テーブルにマップされた永続オブジェクトに対して。 Mappedクラスは、Plain Old Java Objectのすべてのルールを持つPOJOでなければなりません。そのセッターとゲッターは、オブジェクトの初期化の他のコードを持つべきではありません。HibernateはプレーンPOJOを使用します。

public class Cat { 

      String id; 
      String name; 
      Type type; 


     /** 
     * @return the id 
     */ 
     public String getId() { 
      return id; 
     } 
     /** 
     * @param id the id to set 
     */ 
     public void setId(String id) { 
      if(id != null) { 
       type = new Type(); //This will cause in exception org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 
            //ERROR 2017-03-07 00:37:30,253 [tomcat-http--22] - ERROR: cannot execute UPDATE in a read-only transaction 
      } 
      this.id = id; 
     } 
     /** 
     * @return the name 
     */ 
     public String getName() { 
      return name; 
     } 
     /** 
     * @param name the name to set 
     */ 
     public void setName(String name) { 
      this.name = name; 
     } 

例外がある: -

WARN 2017-03-07 00:37:30,253 [tomcat-http--22] - SQL Error: 0, SQLState: 25006 
ERROR 2017-03-07 00:37:30,253 [tomcat-http--22] - ERROR: cannot execute UPDATE in a read-only transaction 
ERROR 2017-03-07 00:37:30,254 [tomcat-http--22] - Could not synchronize database state with session 
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168) 
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) 

はなぜ厳格な規則を持つ唯一のPOJOを期待して休止状態?休止状態にはこれに関するガイドラインがありますか?

メソッドsetIdからコードを削除すると機能しますが、割り当てを保持しているだけです。あなたはどこか(読み取り専用=真)@Transactionalとしてメソッドをマークしているよう

+0

これは単なる愚かとunflexible Hibernateが倍にする方法を示して見えます。 (例外メッセージは意味をなさない) –

+0

コードのサンプルを提供できますか? – Reborn

答えて

1

+0

シンプルなpojoクラスです。私は注釈を使用していません。マッピングファイルでは、何も読み取り専用ではありません –

関連する問題