2017-10-18 3 views
0

Wie fügt man Daten vom Typ java.util.Set in mysql db Spalte des Typs set (mysql set type) ein?Wie füge ich Daten vom Typ java.util.Set in meine SQL-Datenbank ein, wobei die Spalte des Typs mit ibatis gesetzt wird?

Mein POJO:

public class UserTEO 
{ 
    private Integer id; 
    private Set changedfieldset; 
    //getters and setters 
} 

XML-Datei:

<sqlMap namespace="user"> 

    <typeAlias alias="USER" type="com.howtodoinjava.ibatis.demo.dto.UserTEO" /> 
    <insert id="addUser" parameterClass="USER"> 
     INSERT INTO USERINFO (ID,CHANGEDFIELDSET) 
     VALUES(#id#,#changedfieldset#); 
    </insert> 
</sqlMap> 

Datenbank:

CREATE TABLE USERINFO 
(
    ID INT, 
    CHANGEDFIELDSET SET('') 
); 

Ausnahme:

com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in user.xml. 
--- The error occurred while applying a parameter map. 
--- Check the user.addUser-InlineParameterMap. 
--- Check the parameter mapping for the 'changedfieldset' property. 

Bitte helfen Sie. Vielen Dank !

Antwort

1

Ich vermute, Sie möchten explizit mit (alten) ibatis arbeiten und nicht mit Mybatis. Also hier ist die documentation ich referenziert.

Das Mysql SET erwartet eine Reihe von gesetzten Werten getrennt durch Kommas und ohne Leerzeichen: StringUtils.join(set, ","). Sie müssen also einen Typ-Handler verwenden, um das Java-Set in diese Zeichenfolge zu transformieren: Erweitern Sie BaseTypeHandler, und überschreiben Sie dabei die Methode setParameter.

Dann rufen Sie wie folgt vor:

INSERT INTO USERINFO (ID,CHANGEDFIELDSET) 
     VALUES(#id#,#changedfieldset,handler=YourCustomTypeHandlerTypeAlias#) 
+0

superb! Vielen Dank ! Inzwischen habe ich den Getter meines Sets geändert, um String zurückzugeben, der gut funktionierte. Aber das ist die echte Lösung. Danke Kumpel . – iAmLearning

Verwandte Themen