1616package org .eclipse .jnosql .diana .cassandra .column ;
1717
1818
19+ import com .datastax .oss .driver .api .core .CqlIdentifier ;
1920import com .datastax .oss .driver .api .core .CqlSession ;
2021import com .datastax .oss .driver .api .core .data .UdtValue ;
2122import com .datastax .oss .driver .api .core .metadata .schema .ClusteringOrder ;
@@ -62,7 +63,7 @@ public static RegularInsert insert(ColumnEntity entity, String keyspace, CqlSess
6263 entity .getColumns ().stream ()
6364 .forEach (c -> {
6465 if (UDT .class .isInstance (c )) {
65- insertUDT (UDT .class .cast (c ), keyspace , session , insert );
66+ insertUDT (UDT .class .cast (c ), keyspace , session , values );
6667 } else {
6768 insertSingleField (c , values );
6869 }
@@ -103,7 +104,7 @@ private static Function<Sort, ClusteringOrder> mapSort() {
103104 ClusteringOrder .DESC ;
104105 }
105106
106- private static void insertUDT (UDT udt , String keyspace , CqlSession session , InsertInto insert ) {
107+ private static void insertUDT (UDT udt , String keyspace , CqlSession session , Map < String , Term > values ) {
107108
108109 UserDefinedType userType =
109110 session .getMetadata ()
@@ -113,20 +114,22 @@ private static void insertUDT(UDT udt, String keyspace, CqlSession session, Inse
113114
114115 Iterable elements = Iterable .class .cast (udt .get ());
115116 Object udtValue = getUdtValue (userType , elements );
116- insert . value (getName (udt ), QueryBuilder .literal (udtValue ));
117+ values . put (getName (udt ), QueryBuilder .literal (udtValue ));
117118 }
118119
119120 private static Object getUdtValue (UserDefinedType userType , Iterable elements ) {
120121
121122 List <Object > udtValues = new ArrayList <>();
122123 UdtValue udtValue = userType .newValue ();
124+ final List <String > udtNames = userType .getFieldNames ().stream ().map (CqlIdentifier ::asInternal )
125+ .collect (Collectors .toList ());
123126 for (Object object : elements ) {
124127 if (Column .class .isInstance (object )) {
125128 Column column = Column .class .cast (object );
126129 Object convert = ValueUtil .convert (column .getValue ());
127130
128- //DataType fieldType = userType.getFieldType (column.getName());
129- DataType fieldType = null ;
131+ final int index = udtNames . indexOf (column .getName ());
132+ DataType fieldType = userType . getFieldTypes (). get ( index ) ;
130133 TypeCodec <Object > objectTypeCodec = CodecRegistry .DEFAULT .codecFor (fieldType );
131134 udtValue .set (getName (column ), convert , objectTypeCodec );
132135
0 commit comments