0

次のオブジェクトグラフを持っている間:

public class SecureDetails{
    @Persistent(defaultFetchGroup = "true", table = "sc_details_emails")
    @Join(column = "sc_details_pk")
    @Element(column = "email")
    private List<String> emails;
}

datanucleus がスキーマの自動作成を試行している間、この例外を受け取り続けます ( DEBUGログ レベルがアクティブになり、簡潔にするためにスタック トレースが切り捨てられます)。

21:09:24 DEBUG (Log4JLogger.java:58)-[main] Creating foreign key constraint : "sc_details_emails_fk1" in catalog "" schema ""
21:09:24 DEBUG (Log4JLogger.java:58)-[main] ALTER TABLE sc_details_emails ADD CONSTRAINT sc_details_emails_fk1 FOREIGN KEY (sc_details_pk) REFERENCES sc_details (sc_details_id) 
21:09:24 ERROR (Log4JLogger.java:115)-[main] An exception was thrown while adding/validating class(es) : BLOB/TEXT column 'sc_details_pk' used in key specification without a key length
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: BLOB/TEXT column 'sc_details_pk' used in key specification without a key length
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
    .
    .
    .

serialized注釈パラメータを注釈の値でfalse指定しようとしましたが、別@Elementの注釈の値で指定しようとしましたが、それでも問題は解決しませんでした。datanucleus がバイナリ列を構築していると思ったので、それを試しました。そのため、長さを指定する必要があります。また、長さを指定する場所がわからないため、長さを指定することさえできませんでした。@Persistencefalse

編集: Datanucleus はデータベース全体をゼロから作成します。SQLのみを使用してクエリを実行する構成テーブルは3つだけで、それらに関連するマッピングはありません。

MySQL v5.5 で datanucleus v3.1.3 を使用しています

4

2 に答える 2

0

驚くべきことに、クリーン ビルドで問題が解決しました。

于 2013-01-08T14:05:34.843 に答える
-1

したがって、DataNucleus にすべてのスキーマを作成させておらず、提示する (小さな) メタデータと矛盾する BLOB 列がどこかにあります。解決策: DataNucleus にスキーマを生成させるか、実際にスキーマを提示して、人々が何が問題なのかを教えてくれるようにします。

于 2013-01-08T08:15:25.587 に答える