首页 > 解决方案 > 如何使用java在mysql中插入枚举列类型

问题描述

当我想插入数据并在 mysql 中有 enumtype 列时,我遇到了问题。但我的 sql 总是回滚我的创建。我的问题是如何在我想要创建的时候在 mysql 列中插入枚举类型的数据集

System.out.print(" ExecTransType "+message.getString(ExecTransType.FIELD));
String Orders = message.getString(OrdType.FIELD);
if (Orders.equals("P")){
    newordersingleObj.setOrdType("PEGGED");
}else if (Orders.equals("1")){
    newordersingleObj.setOrdType("MARKETORDER");
} else if (Orders.equals("2")){
    newordersingleObj.setOrdType("LIMIT");
}
System.out.print(" OrdType "+message.getString(OrdType.FIELD));
newordersingleObj.setExecType(message.getString(ExecType.FIELD));
System.out.print(" ExecType "+message.getString(ExecType.FIELD));
String status = message.getString(OrdStatus.FIELD);
if (status.equals("0")){
    newordersingleObj.setOrderStatus("NEW");
}else if(status.equals("1")){
    newordersingleObj.setOrderStatus("PARTIALFILLED");
}else if(status.equals("2")){
    newordersingleObj.setOrderStatus("FILLED");
}else if(status.equals("3")){
    newordersingleObj.setOrderStatus("DONEFORDAY");
}else if(status.equals("4")){
    newordersingleObj.setOrderStatus("CANCELLED");
}else if(status.equals("8")){
    newordersingleObj.setOrderStatus("REJECTED");
}else if(status.equals("C")){
    newordersingleObj.setOrderStatus("EXPIRED");
}

System.out.print(" OrdStatus "+message.getString(OrdStatus.FIELD));
newordersingleObj.setSide(message.getInt(Side.FIELD));
System.out.print(" Side "+message.getInt(Side.FIELD));
newordersingleObj.setOrderQty(message.getDouble(OrderQty.FIELD));
System.out.print(" OrderQty "+message.getDouble(OrderQty.FIELD));
newordersingleObj.setLeavesQty(message.getDouble(LeavesQty.FIELD));
System.out.print(" LeavesQty "+message.getDouble(LeavesQty.FIELD));
newordersingleObj.setCumQty(message.getDouble(CumQty.FIELD));
System.out.print(" CumQty "+message.getDouble(CumQty.FIELD));
newordersingleObj.setLastShares(message.getDouble(LastShares.FIELD));
System.out.print(" LastQty "+message.getDouble(LastShares.FIELD));
newordersingleObj.setAveragePrice(message.getDouble(AvgPx.FIELD));
//                newordersingleObj.setCheckSum("95");
newordersingleObj.setPrice(message.getDouble(Price.FIELD));
newordersingleObj.setCurrency(message.getString(Currency.FIELD));
newordersingleObj.setMsgSeqNum(3);
newordersingleObj.setSenderCompId("Fastmatch1");
newordersingleObj.setTargetCompID("TRValueTrade2UAT1");
newordersingleObj.setSendingTime(message.getString(TransactTime.FIELD));
newordersingleObj.setCreated_at(time);
System.out.print("sebelum insert ke db");
RepositoryFactory.getOrderRepository().create(newordersingleObj);

这是我的枚举类

public enum enumOrderStatus {
    NEW, PARTIALFILLED, FILLED, DONEFORDAY, CANCELLED, REJECTED, EXPIRED
}

这是我的第二个枚举类

public enum enumOrderType {
    PEGGED, LIMIT, MARKETORDER
}

在这里我的枚举类型实体为什么不能在mysql中转换枚举类型

@Enumerated(EnumType.STRING)
        @Column(name="OrderStatus")
        private enumOrderStatus OrderStatus;

        @Enumerated(EnumType.STRING)
        @Column(name="OrdType")
        private enumOrderType OrdType;
public String getOrderStatus() {
            return this.OrderStatus.name();
        }

        public void setOrderStatus(enumOrderStatus OrderStatus) {
            this.OrderStatus = OrderStatus;
        }

        public String getOrdType() {
            return this.OrdType.name();
        }

        public void setOrdType(enumOrderType OrdType) {
            this.OrdType = OrdType;
        }
there is no error 
but my code like stack in this 

    Hibernate: insert into new_single_order_response (AveragePrice, ClOrdID, created_at, CumQty, Currency, ExecID, ExecTransType, ExecType, LastShares, LeavesQty, MsgSeqNum, OrdType, OrderID, OrderQty, Price, SenderCompId, SendingTime, Side, Symbol, TargetCompID, TransactTime, updated_at, OrderStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 

i also have catch error but there is no error only stack for insert to my database


        } catch (FieldNotFound e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    } catch (SQLException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
        } catch (Exception e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
        }

my question is how to insert to enum column using java ? because i got error when i want create there is always roll back my execution so i cannot insert to my database. and my data cannot insert to my database always rollback but there is no error capture here

标签: javamysqlhibernateenums

解决方案


推荐阅读