問題タブ [datanucleus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1187 参照

gwt - Datanucleus JDO 新しく生成された主キーを取得する

GWT プロジェクトで datanucleus と jdo を使用しています。makePersistent() を使用してデータベースに要素を追加した後、生成された主キーを取得するにはどうすればよいですか

編集 注釈を使用します。主キーは次のとおりです。

マッピングを行ったのは私ではなく、まだすべてを取得していません。

0 投票する
2 に答える
887 参照

java - Appengine データストアのファントム エンティティ - 矛盾した状態ですか?

以前は正常に動作していた Java appengine コードで奇妙なエラーが発生しました (データストア内のデータ以外は何も変更されていません)。

クエリの結果を繰り返し処理し、エンティティのいくつかのプロパティを変更しようとしています。クエリは一連の結果を返しますが、リスト内の最初の結果にアクセスしようとすると、そのプロパティ (ただしそのキー) にアクセスしようとすると例外がスローされます。例外は次のとおりです。

そして、ここに私のコードがあります:

c.setOpen(false) を実行しようとすると、コードが例外をスローします。キーではないプロパティにアクセスまたは設定するのは初めてです。したがって、データストアにキー 3204258 のファントム エンティティがあるようです。このエンティティは実際には存在しません (管理コンソールからデータストアにクエリを実行) が、何らかの理由でクエリによって返されます。データ ストアが一貫性のない状態になる可能性はありますか?

for ループの最初の行として配置することで、次の回避策を管理しました。明らかに醜いハック:

if (c.getOnTheCanId() == 3204258) {続行; }

何か案は?

0 投票する
1 に答える
450 参照

java - AppEngine開発環境はjava.lang.VerifyErrorを与えます

Eclipse開発環境でアプリを実行すると次のエラーが発生しますが、アプリをapp-engineにデプロイすると正常に動作します。この作業を開発環境で行うことは可能ですか?

0 投票する
2 に答える
1769 参照

jdo - DataNucleus 結合を回避しますか?

JDBC Web アプリケーションを JDO DataNucleus 2.1.1 に移行しようとしています。

次のようなクラスがいくつかあるとします。

public class Position { プライベート整数 ID; プライベート文字列のタイトル。}

public class Employee { プライベート Integer id; プライベート文字列名; プライベート ポジション ポジション; }

Position SQL テーブルの内容は、あまり頻繁に変更されることはありません。JDBC を使用して、テーブル全体をメモリに読み込みます (定期的に、または必要に応じて更新できます)。次に、Employee をメモリに読み込むときに、Employee テーブルから位置 ID を取得し、それを使用してメモリ内の Position インスタンスを取得します。

ただし、DataNucleus を使用して、すべての位置を反復すると、次のようになります。

その後、別の PersistenceManager を使用して、すべての Employees を反復処理し、Position を取得します。

次に、従業員の職位を取得すると、DataNucleus は 2 つのテーブルを結合する SQL を生成するように見えます。

SELECT A0.POSITION_ID,B0.ID,B0.TITLE FROM MYSCHEMA.EMPLOYEE A0 LEFT OUTER JOIN MYSCHEMA."POSITION" B0 ON A0.POSITION_ID = B0.ID WHERE A0.ID = <1>

私の理解では、利用可能な場合、DataNucleus はキャッシュされた Position インスタンスを使用します。(そうですか?)しかし、結合によってパフォーマンスが低下することが懸念されます。ベンチマークを実行するにはまだ十分ではありません。私の恐れは見当違いですか?続行してベンチマークする必要がありますか? DataNucleus に結合を回避させる方法はありますか?

私ができることを望んでいるのは、DataNucleus に先に進み、デフォルトのフェッチ グループの一部として POSITION_ID int を読み取り、対応する位置が既にキャッシュされているかどうかを確認するように指示することだと思います。その場合は、そのフィールドを設定します。そうでない場合は、必要に応じて後で参加します。さらに良いことに、その int ID をどこかに隠しておき、後で getPosition() が呼び出されたときにそれを使用します。これにより、すべての場合で結合が回避されます。

クラスと主キーの値を知っていれば、素朴なケースを回避するのに十分だと思いますが、DataNucleus についてはまだ十分に知りません。


いただいた有益なフィードバックにより、私の .jdo はクリーンアップされました。ただし、POSITION_ID フィールドをデフォルトのフェッチ グループに追加した後も、まだ参加しています。

なぜそうしているのか理解しています。素朴な方法は常に機能します。私はそれがもっと能力があることを望んでいました。DataNucleus は結果セットからすべての列を読み取るのではなく、キャッシュされた位置を返す場合がありますが、データストアを呼び出して 2 番目のテーブルにアクセスし、それに伴うすべての処理 (ディスクのシークや読み取りを含む) を行います。それがその仕事を放棄するという事実は、ほとんど慰めにはなりません。

私がやりたかったことは、すべての位置がキャッシュされることを DataNucleus に伝えることでした。それを信じてください。何らかの理由でそうでないものを見つけた場合は、キャッシュミスのせいにしてください。Position テーブルで別の選択を (透過的に) 実行する必要があることを理解しています。(さらに良いのは、キャッシュ ミスのために取得する必要があるすべての位置を固定することです。そうすれば、オブジェクトでキャッシュ ミスが再び発生することはありません。)

それが、DAO を介して JDBC を使用して現在行っていることです。永続層を調査する理由の 1 つは、これらの DAO を捨てることでした。単純なフェッチを超えて移動できない永続レイヤーに移動することを想像するのは困難であり、結果として高価な結合が発生します。

Employee が Position だけでなく Department やその他のフィールドを持つとすぐに、Employee fetch によって半ダースのテーブルがアクセスされますが、これらのオブジェクトはすべてキャッシュに固定されており、クラスとクラスを指定してアドレス指定できます。主キー。実際、これを自分で実装して、Employee.position を Integer に変更し、IntIdentity を作成して、それを PersistenceManager.getObjectByID() に渡すことができます。

私が聞いていると思うのは、DataNucleus はこの最適化ができないということです。そうですか?大丈夫です、私が期待したものではありません。

0 投票する
1 に答える
482 参照

google-app-engine - Datanucleus/Roo/GWT - 日付フィールドを持つ Bean の永続化に関する問題

サンプルの GWT/Google Appengine アプリケーションを実行してみました - Roo コマンド「スクリプト費用.roo」を使用して ROO によって生成された費用 (ここでアドバイスされているように)...

このアプリは datanucleus-core - 1.1.6 と HSQLDB をメモリ内データベースとして使用します。

アプリケーションを実行し、Employee オブジェクトを正常に保存および取得することができました。(これらの Employee オブジェクトには日付型のフィールドはなく、string フィールドと int フィールドのみがあります)。

しかし、アプリが「予期しないサーバー エラー」というエラー メッセージを出力して、「レポート」オブジェクトを保存する際に問題が発生しています。ログとデバッグを確認すると、null ではない日付型フィールド (「作成された」日付フィールド) に null を格納しようとしたために、この予期しないエラーが発生しました。

ここがややこしいところです... この Report クラスのソース コードを見ると、「作成された」日付フィールドが「not null」フィールドとして指定されていません (@notnull 注釈がありません)。これを確認するために、データベースを Postgresql に変更し、自動生成されたスキーマを調べたところ、この日付フィールドが実際に「not null」としてマークされていることがわかりました。

これは、自動スキーマ生成中の DataNucleus が常に日付フィールドを「not null」としてマークすることを意味します。

さらに、ORM ライブラリを Hibernate に変更してこれを確認したところ、同じコードで問題なく動作し、HSQL と Postgres DB の両方に日付フィールドを含むレポート オブジェクトを保存できました。

これは DataNucleus のバグですか? 他の誰かがこの問題を見ていますか?

0 投票する
2 に答える
1192 参照

google-app-engine - Maven を使用した Google App Engine

私は、単一のmavenフォルダー構造の下で、sqlとgae(「datanucleus.properties」ファイルを変更する必要がある場所)の両方で実行できる単一のプロジェクトを作成しようとしています。最初に、mysql を使用して GAE Web サイトで Greeting の例を取得しようとしました (これは現在動作しています)。次に、beardedgeeks チュートリアルからインスピレーションを得て、gae で実行するために必要な依存関係を追加しようとしました。ただし、 mvn gae:run と入力すると、http://pastebin.com/fJ7c7xfxに投稿された次のエラーが表示されます。Google などで回答を探すのに多くの時間を費やしましたが、訴訟を進めることができませんでした。

参考になれば幸いです。乾杯、マノジョ

0 投票する
1 に答える
911 参照

jdo - DataNucleus でプリペアド ステートメント パラメータが設定されていない

DataNucleus 2.1.1 を使用して従業員オブジェクトをデータベースに挿入しようとしていますが、"insert" 準備済みステートメントが実行される前に外部キーの Position パラメータが設定されていません。パラメータが設定されないようにするにはどうすればよいですか? 私は何かを忘れていますか?読み取りは正常に機能します。

0 投票する
1 に答える
1126 参照

gwt - 「org.datanucleus」はすでに Spring Source Toosuite に登録されています

スレッド「メイン」プラグイン (バンドル) の例外「org.datanucleus」は既に登録されています。クラスパスに同じプラグインの複数の JAR バージョンが含まれていないことを確認してください。URL「file:/home/zakaria/.m2/repository/org/datanucleus/datanucleus-core/1.1.6/datanucleus-core-1.1.6.jar」が登録済みで、同一のプラグインを登録しようとしているURL「file:/home/zakaria/springsource/sts-2.3.3.M2/plugins/com.google.appengine.eclipse.sdkbundle.1.3.5_1.3.5.v201007021040/appengine-java-sdk-1.3.5」にあります。 /lib/user/orm/datanucleus-core-1.1.5.jar." org.datanucleus.exceptions.NucleusException: プラグイン (バンドル) "org.datanucleus" は既に登録されています。クラスパスに同じプラグインの複数の JAR バージョンが含まれていないことを確認してください。URLは「file:/home/zakaria/.

助けてください。組み込みの Roo シェルで次のコマンドを再入力しようとしましたが、うまくいきません。

ありがとう、

よろしく。

0 投票する
1 に答える
257 参照

java - DataNucleusとキャッシュ調整

DataNucleusはキャッシュ調整をサポートしていますか?はいの場合、どうすれば有効にして使用できますか?

私はまだDataNucleusを積極的に使用していませんが、キャッシュ調整をサポートしている場合は検討したいと思います。

背景:キャッシュ調整は、変更されたエンティティについて相互に通知するために複数のキャッシュインスタンスによって使用されます(たとえば、JMSまたはRMIを介して)。その目的は、失敗または繰り返されるトランザクションの数を減らすことです(たとえば、EclipseLinkが提供するものと同様ですか?)

0 投票する
2 に答える
2031 参照

java - JDO クエリで大文字と小文字を区別しない

データベースから結果のリストを選択したいの==ですが、JDO クエリの演算子では大文字と小文字が区別されます。単一のパラメーターを使用してテーブルから「USER」、「user」、および「User」を選択する方法はありますか?

MySQL にはLIKE演算子があり、Java にはequalsIgnoreCase関数があります。ただし、この例ではどちらも機能しません。