問題タブ [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.
java - CayenneModeler が Cayenne.xml を生成しない
私はApache Cayenneを学んでいるので、初めてです。
公式ガイドhttp://cayenne.apache.org/docs/3.0/tutorial.htmlに従っています。
ガイドとまったく同じことを行っていますが、プロジェクトを保存すると、3 つではなく 2 つの xml ファイルが生成され、(生成されたクラスを使用して) Java アプリを実行すると、次のエラーが表示されます。
何が起こったのかわからない
apache-cayenne - Apache Cayenne: 動的に生成されたプロジェクト定義を提供する
この質問の続き:
Apache Cayenne: ユーザー定義テーブル: 例?
設計の一環として、実行時にデータベース スキーマを変更する操作を許可するつもりです。上記の質問で説明したように、Cayenne はこれをサポートしているようです。
ファイル システムを使用せずに、新しいプロジェクト定義を ServerRuntime に提供する方法に興味がありました。
ソースを見ると、次の 2 つのオプションがあるように見えます。
(1) カスタム クラスローダーを実装し、それをスレッド ローカル クラス ローダーとして設定し、Cayenne が ClassLoaderResourceLocator を使用してそれを見つけられるようにします。
(2) カスタム ResourceLocator を実装し、インジェクションを使用してバインドします。
(1) を行う方法は明らかですが、ClassLoaderResourceLocator の動作に依存しないため、(2) の方が少しすっきりしています。
(2)は合理的ですか、これをどのようにコーディングしますか?
apache-cayenne - 別のコールバック メソッドからコールバック メソッドをトリガーする
Assignment オブジェクトを作成する PrePersist コールバックがあります。これらの Assignment オブジェクトがデータベースに挿入されたことを知らせるために、コールバックをトリガーする必要があります。Assignments の PostPersist コールバックは、この方法ではトリガーされません。トリガーされたコールバックは PostAdd だけですが、これは役に立ちません。どうすればこれを行うことができますか?ありがとう。
java - Apache Cayenneを利用したデータ挿入時のクエリ
Apache Cayenne 3.1を使用してSQL Server 2012にデータを挿入するコードをJava 8で作成しました。コードの実行中に例外が発生しました: org.apache.cayenne.CayenneRuntimeException: [v.3.1 Sep 20 2014 14:24:57] Commit Exception Caused by: java.sql.SQLException: Could not find stored procedure 'auto_pk_for_table' .
私はカイエン モデラーの pk 生成戦略をデフォルトからデータベース生成に変更することで問題を解決しました。しかし、Java コードを再度実行すると、データベースにレコードを 1 つだけ挿入するはずでしたが、例外で取得した前のレコードも挿入されました。同じシナリオを 3 回作成しようとしましたが、同じ結果が得られました。例外が発生した後、WebサーバーとSQLサーバーのサービスを再起動しようとしましたが、新しいデータを挿入するときに例外レコードも同時に挿入されました。この問題は、catch ブロックにロールバック ステートメントを挿入することでも解決されます。
しかし、新しいデータを挿入するときに、apache cayenne が例外的なデータを挿入する方法と理由を知りたいです。
これは私のコードです。 Java : PersonDao
XML ファイル: cayenne-test.xml
TestDataMap.map.xml
java - select句を使用せずにApache Cayenneでレコードを更新するにはどうすればよいですか
Apache カイエン 3.1 を使用しています。データベース内のレコードを更新する方法の 1 つは、最初に選択クエリを使用してレコードを検索してから更新することですが、更新に選択クエリを使用したくありません。レコードを直接更新するにはどうすればよいですか?
jdbc - ORM (Apache Cayenne) 、JDBC、SpringJDBC のどちらが優れていますか?
私は、大量のトランザクションと複雑なクエリを使用して、MSSQL サーバーや PostgreSQL などの複数のデータベースに取り組んでいます。単純なjdbcはORMよりも高速であることを検索しました。同じ作業に対して異なるデータベースに対して異なるクエリを作成したくないため、また標準化された私のdaoレイヤーに対してもORMを使用することを考えていました。外部キーを使用せずにデータベース テーブルをマッピングしています。Apache Cayenne のような ORM では、外部キー制約を使用してテーブルをマッピングする必要があるため、結合またはその他の複数のテーブル操作を使用できます。使いやすいですか、ORMまたは単純なjdbcで問題ありませんか。
java - Cayenne キャッシュ - クエリ キャッシュはオブジェクト キャッシュを置き換えますか?
クラスターで実行する場合、または同じドメインを使用する複数の JVM で cayenne を最適に構成する方法に関するリソースを探しています。私はドキュメントを読んでいて、これを見ています:
「オブジェクトの変更について他のスタックに通知する方法があります。これはモデラーで設定できます。ただし、すべての変更を完全に同期すると、過剰なネットワーク トラフィックと CPU 消費が発生することが多く、通常は説明されているクエリ キャッシュ アプローチを優先して回避されます。この章の他の場所で。」
これは、Query-Result-Caching ページにリンクしています。関連付けられたオブジェクトがゲッターを介して取得されるとき、またはオブジェクトがその ID によって取得されるときに、オブジェクトのキャッシュが使用されることは私の理解です。この引用は、クエリ キャッシュを構成するとオブジェクト キャッシュが使用されないことを示しているのでしょうか? それとも、アプリケーション コードのオブジェクト キャッシュにヒットすることを避ける必要があるのでしょうか? オブジェクト キャッシュを完全に無効にする必要がありますか (それが可能な場合でも)? オブジェクト キャッシュへの変更を他のスタックに通知するように cayenne を設定しない場合、データが古くなるリスクはありませんか?
複数のノードで cayenne を実行するための最善の方法に関するあらゆるヒントに感謝します。または、参考になるリソースがあれば、それも非常に役立ちます。
お時間をいただきありがとうございます。