0

これは私のモデルクラス属性です

@Column(name = "createdate")  
@Type(type="long_timestamp")  
private Date creationDate;

これは私のタイプ定義です

@TypeDef(  
name="long_timestamp",  
typeClass = com.x.LongTimestampType.class  
),

私の LongTimestampType.java を参照してください

public class LongTimestampType extends TimestampType {


    @Override
    public String objectToSQLString(Date value, Dialect dialect)
            throws Exception {
        return "" + ((Date) value).getTime();
    }

    @Override
    public Object get(ResultSet rs, String index) throws HibernateException, SQLException {
        return new Date(rs.getLong(index));
    }

    @Override
    public void set(PreparedStatement ps, Date value, int index, SessionImplementor sessionImplementor)  throws HibernateException, SQLException {
        System.out.println("set Date as BIGINT into Prepared Statement :: " + ((Date)value).getTime());
        ps.setLong(index, ((Date)value).getTime());
    }

    @Override
    public String getName() {
        return "long_timestamp";
    }

    public int[] sqlTypes() {
        return new int[] { Types.BIGINT };
    }

   /* public int sqlTypes() {
        return Types.BIGINT;
    }*/
}

これは私のMySqlテーブルの列です

createdate  bigint(20) NULL

このオブジェクトを保存するための私のJavaコードは

entityManager.persist(object);

私の問題は、オブジェクトをテーブルに保存しようとすると、次のようにスローされます: createDate にもnulljava.sql.BatchUpdateException: Data truncated for column 'createdate' at row 1
を 設定します。この問題を解決するための解決策を教えてください

4

3 に答える 3

1

多分

public String objectToSQLString(Date value, Dialect dialect)

する必要があります

public String objectToSQLString(Object value, Dialect dialect)

そうしないと、メソッドが正しく上書きされません

于 2012-12-21T15:12:47.500 に答える
0

問題は

createdate  bigint(20) NULL

これを次のように宣言する必要がありますdatetime

してみてください

alter table table1 modify createdate datetime 
于 2012-12-21T12:53:47.010 に答える
0

列を変更できます

createdate as varchar(20)
于 2012-12-21T14:33:43.913 に答える