問題タブ [apache-cayenne]
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.
apache-cayenne - Cayenne は commitChanges() で INSERT クエリを実行します
次のコードがあります。
最初commitChanges()
にすべてのクエリをコミットします。次に、カイエンのログをクリアします。2 番目commitChanges()
に、これがログに表示されます。
情報: QueryLogger.logBeginTransaction: 2013-07-10 07:37:11,214: --- トランザクションが開始されました。INFO: QueryLogger.logQuery: 2013-07-10 07:37:11,218: INSERT INTO scheduler_assignment
... INFO: QueryLogger.logQuery: 2013-07-10 07:37:11,241: DELETE FROM scheduler_assignment
... INFO: QueryLogger.logCommitTransaction: 2013-07-10 07:37:11,286: +++ トランザクションがコミットされました。
削除しようとしているときに INSERT ステートメントを実行している理由がわかりません。誰でも説明できますか?ありがとう!
maven - 統合スコープ内の Derby JDBC ドライバーの依存関係スコープ (cayenne)
「mvn install」の実行時にデータベーススキーマを自動的に作成できるように、pom.xml を構築しようとしています。これを行うために「maven-cayenne-plugin」を使用しています。出力を見るとわかるように、これはプラグインが(統合テスト段階で)呼び出されています。しかし、モジョは例外で失敗します: (これを確認するために -e および -X フラグを使用しました)。
(EmbeddedDriver を使用しようとすると、依存関係として「derbyclient」または単に「derby」を含めるかどうかに関係なく、同じ結果が得られます)。
問題を再現するはずの pom.xml を次に示します。WindowsでMVN 3を使用しています。[Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)]
これには、有効な cayenne の「datamap.map.xml」ファイル (src/main/resources 内) も必要です。以前に作成したものを次に示します。
編集:
さらに情報を追加します。
derbyclient-10.10.1.1.jar にはクラス「org.apache.derby.jdbc.ClientDriver」が含まれています (Netbeans から JAR を展開しただけです)。
-X フラグは、CLASSPATH が JAR を正しく参照していることを示しているようです。
解決策:pom.xmlの作業(回答と私のコメントを参照):
java - カスタム コンストラクター: Apache Cayenne 3.2M
私はAPIが初めてです。次のように「コンテキスト」オブジェクトを介してオブジェクトを構築する必要があるようです。
通常の new() 方法で Java オブジェクトを作成するだけではなく、次のようにします。
しかし、次のような「MyEntity」クラスのコンストラクターを作成したいと思います。
どうすればこれを達成できますか-理想的には、オブジェクトをインスタンス化して設定を実行するために「ラッパー」クラスを別の場所に置くのではなく、クラス MyEntity 自体にロジックを保持したいのです....「ヘルパー」を持つことができると思います以前にインスタンス化されたインスタンスの設定だけのメソッド...しかし、ここで欠けているイディオムはありますか...?
java - Apache Cayenne: Postgresql 列挙型の処理
次のように定義された「foo」というデータベースタイプがあります。
また、Apache Cayenne Modeler を使用してテーブルのクラスを生成すると、そのフィールドが未定義であるというエラーが表示されます。調べてみると、このフィールドに対して生成された型はありません。
Cayenne が適切に処理できるように、Java 側で postgresql 列挙型を実装するにはどうすればよいですか?
java - Cayenne でデータベース パスを設定する
プロジェクトで Apache Cayenne を使用する予定ですが、実際に正しくセットアップするのに苦労しています。
Cayenne チュートリアルは、CayenneModeller でデータベースの場所を設定する方法を示しています。私の問題は、実行時に動的に決定されるパスで Apache Derby を使用したいのですが、実際に Cayenne にそのパスを使用させる方法がわかりません。
私は次のようにパスを設定しようとしました:
しかし、後で を呼び出すとDataContext.createDataContext()
、コンソールのログに次のように表示されます。
情報: 接続プールが作成されました: jdbc:derby:memory:testdb;create=true
これは、私が設定したものではなく、CayenneModeller で設定したインメモリ テスト URL ですsetupDataBase
(はい、そのメソッドが呼び出されるようにしました)。また、データベース ファイルは作成されません (パスが正しいことをデバッガーで確認しました)。
では、この問題に対する標準的な解決策は何ですか?
java - Apache Cayenne - Token.kind フィールドの定数を定義するコードが見つかりません
Cayenne を使用してorg.apache.cayenne.exp.parser.ExpressionParser
、一連の を生成する を介して SQL 条件を解析していますorg.apache.cayenne.exp.parser.Token
。各トークンのタイプ (識別子、等号、数値、文字列など) を特定したいと考えています。
トークンの型は ExpressionParser によって確実に識別され、int
fieldに格納されているように思えますToken.kind
。私の解析テストでこのフィールドが示す値は、確実に一貫しています (たとえば、 =
is always 5
、リテラル文字列は always 42
、and
演算子は always2
など)。
Token.kind
私の問題は、値を比較する定数を含む Java クラスが見つからないことです。
フィールドの Javadocは次のようにToken.kind
述べています。
このトークンの種類を表す整数。この番号付けシステムは JavaCCParser によって決定され、これらの番号のテーブルがファイル ...Constants.java に格納されます。
ファイルの完全な名前が指定されていないため、JavaCCParser をダウンロード*Constants.*
してjavacc-5.0src.zip
、javacc-6.0.zip
、 、javacc.jar
それら 2 つの zip に含まれる 2 つ、およびcayenne-3.0.2-src.tar.gz
.
そこで見つけたクラスのどれも、テストで見た値と一貫して一致する定数を持っているようには見えません。私がそれに到達することができた最も近いものは、クラスorg.apache.cayenne.exp.parser.ExpressionParserConstants
which for ex. を含みint PROPERTY_PATH = 34
、int SINGLE_QUOTED_STRING = 42
これはテスト式の実際のトークンと完全に一致しますが、他のトークンにはそのクラスに対応する定数がありません。=
記号 ( kind
= 5) と演算子and
( kind
= 2)。
だから私の質問は、どのJavaクラスでそれらの定数が定義されているかを誰かが知っているかどうかです。
java - Cayenne: 式の解析後にトークンの位置を取得する
Cayenne で式を解析しているので、解析の結果としてトークン (org.apache.cayenne.exp.parser.Token) が得られます。
解析された式のどの位置でトークンが見つかったのか知りたいです。私の問題は、この情報を返すメソッドが見つからないことです。それが可能かどうか誰にもわかりますか?
これは私がすることの例です: