2017-05-11 12 views
0

したがって、私は別のテーブルで最初に作成する必要があるSQLテーブルにIDを設定する必要があるため、挿入クエリが実行される前にトリガするH2トリガを作成しようとしていますH2トリガーはトリガーされません

インサートが、このようになりますが起こるはず表:

CREATE TABLE IF NOT EXISTS INGREDIENTS(
ID INT NOT NULL, 
Name VARCHAR(50), 
ALK INT check (ALK <= 100 and ALK >= 0), 
CalPerHundred INT, 
PRICE DOUBLE check(PRICE>=0), 
FOREIGN KEY (ID) REFERENCES ITEM(ID) 
); 

トリガーのために作成します。

CREATE TRIGGER IF NOT EXISTS ING_TRIGGER 
BEFORE INSERT 
ON INGREDIENTS 
FOR EACH ROW 
CALL "Partyplaner.Persistence.Trigger.IngredientsTrigger"; 

トリガー用のコードを:

public class IngredientsTrigger implements Trigger { 

    private Logger LOGGER = LoggerFactory.getLogger(IngredientsTrigger.class); 

    @Override 
    public void init(Connection conn, String schemaName, 
        String triggerName, String tableName, boolean before, int type) 
      throws SQLException { 
     LOGGER.debug("hello im init"); 
    } 

    @Override 
    public void fire(Connection conn, Object[] oldRow, Object[] newRow)throws SQLException { 

     LOGGER.debug("hello im fire"); 
     PreparedStatement pstmt_key; 
     try { 
      pstmt_key = conn.prepareStatement("INSERT INTO ITEM() VALUES()"); 
     } catch (SQLException e) { 
      throw e; 
     } 
     pstmt_key.executeUpdate(); 
     ResultSet generatedKeys = pstmt_key.getGeneratedKeys(); 
     generatedKeys.next(); 

     int id = generatedKeys.getInt(1); 

     generatedKeys.close(); 

     newRow[0]=id; 



    } 

    @Override 
    public void close() throws SQLException {} 

    @Override 
    public void remove() throws SQLException {} 
} 

私はH2 WebInterfaceでトリガーを見ることができますが、成分を挿入しようとするとNULLにIDが許可されないというSQLエラーが発生します。トリガーがすべきことはまさにそれですか?私はトリガからのinitログメッセージしか見ることができませんので、私はそれが呼び出されないようにしています。5回のようにファイルを作成してクラスパスをチェックし、Trigger.class.getName()で印刷させてください。

私はMavenとSpringを使用していますが、Classpathが別のものになっている可能性がありますか?

答えて

0

答えがとてもシンプルだったので、テーブルからNOT NULL Annotationを削除しなければならなかったので、すべて正常に動作しています。

関連する問題