問題タブ [many-to-many]
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 - Hibernate Criteria を使用した ManyToMany 関係のクエリ
この問題を説明する方法がわからないので、例を挙げて質問するのが最善の方法だと思います。
manyToMany 関係を持つ 2 つのテーブルがあります。
DriversLicence <-> LicenceClass
LicenceClass は、「Car」、「Motorbike」、「Medium Rigid」などです。
Hibernate Criteria を使用して、「Car」と「Motorbike」の両方の LicenceClasses を持つすべてのライセンスを見つけるにはどうすればよいですか?
2008 年 12 月 11 日更新 カスタム ResultTransformer を使用すると、これを簡単に実現できることがわかりました。ただし、問題は、クエリが結果を返した後にのみ結果トランスフォーマーが適用されることであり、実際には SQL の一部にはなりません。したがって、私の質問は「SQL で最初に説明したことを実行できますか? Hibernate Criteria のアナログはありますか?」ということになると思います。
nhibernate - API で多対多の関係を処理する方法
2 つのエンティティ Foo と Bar があり、それらの間に多対多の関係があります。
なぜ Foo が多対多の関係に対して「責任がある」のかについての意味論的議論はないとしましょう。しかし、私たちは Foo が関係に対して責任があると勝手に決定します (つまり、NHibernate では Bar を Inverse としてマークします)。
DB の観点からはこれで十分ですが、私のエンティティ API には問題があります。
Foo がこの関係の責任を負うと判断した場合、Bar.AddFoo() メソッドを作成せずに Bar の関連コレクションを更新するにはどうすればよいでしょうか?
このような操作の後にこれらのエンティティを DB からリロードする必要なく、ドメイン モデルの整合性を維持できるはずだと思います。
更新: コメンターに触発されたコードの微調整。
sql - 多対多のテーブルを含む行の MySQL の厳密な選択
多対多形式のテーブルが 3 つあります。つまり、テーブル A、B、および AB は期待どおりに設定されています。
A ID のセットが与えられた場合、すべての ID に一致する AB の行のみを選択する必要があります。
次のようなものは機能しません。
"SELECT * FROM AB WHERE A_id = 1 AND A_id = 2 AND A_id = 3 AND ..." 1 つの行に複数の A_id が含まれないため
SQLステートメントでORを使用すると、少なくとも1つのA IDを持つすべての結果が得られるため、あまり良くありません(ただし、すべてのIDを持つ行のみが必要です)。
編集:
申し訳ありませんが、説明する必要があります。実際の多対多の関係が実際の問題に関連しているかどうかはわかりません。表の概要は次のとおりです。
そのため、人のリスト、オプションのリスト、オプションと人の表があります。
したがって、(1、34、44、...) などのオプション ID のリストが与えられた場合、すべてのオプションを持つ人だけを選択する必要があります。
sql - SQL多対多の関係を検索する方法
2つのメインテーブルnotes
とを含むデータベースがありますlabels
。それらは多対多の関係を持っています(stackoverflow.comがラベルに関する質問をする方法と同様です)。私が疑問に思っているのは、SQLを使用して複数のラベルを使用してメモを検索するにはどうすればよいですか?
たとえば、「1」、「2」、「3」の3つのラベルが付いた「test」というメモがあり、「1」と「2」というラベルが付いた2番目のメモ「test2」がある場合、SQLクエリは何になりますか。ラベル「1」と「2」に関連付けられているすべてのメモを検索しますか?
mysql - Twitterのような「ユーザーをフォロー」と「これを見る」の問題
Twitterの「このユーザーをフォローする」問題のような多対多のトリガー関係を処理するための最良の方法は何ですか。
ユーザーがスレッドの返信を「監視」している場合にも、同様の問題が発生します。スレッドを監視しているユーザーが10,000人いて、誰かが返信した場合、監視者に通知するにはどうすればよいですか?私が考えることができるのは次のとおりです。
挿入時に、「監視テーブル」[フィールド:user_id、thread_id]で、このスレッドのIDに一致するスレッドがないか確認してください。これは私が通知する必要があるユーザーのリストです。通知が必要なユーザーごとに、「通知テーブル」に行を挿入します[フィールド:user_id、message、addonなど]。これで、このテーブルを介してすべてのユーザーに通知を表示できます。
問題は、これはすべて非常に高価に聞こえるということです。特に10,000インサートパーツ。
これを行うためのより良い方法があるはずです...アイデア?
database - 多対多関係のヘルプ
テーブルの多対多の関係に問題があります。これは、トレーニング センターで働く従業員とインストラクターの間です。それらの間のリンクを見つけることができず、それを取得する方法もわかりません。従業員フィールドは次のとおりです。
- 従業員番号
- 従業員名
- 会社名
- 部署の役職
- ビジネスエリア
- 携帯電話番号
- 外線
- ランキング
インストラクターのフィールドは
- 講師名
- 研究所
- 携帯電話番号
- 電子メールアドレス
- 手数料
c# - Linq2Sql Many:Many の質問です。これをどのように行いますか?
私は many:many が Linq2Sql でサポートされていないことを知っていますが、回避策に取り組んでいます
私は小さな SO クローンで作業しており、質問のあるテーブルとタグのあるテーブル、およびリンクテーブル QuestionTag があるため、質問とタグの間に古典的な多対多の関係があります。
フロントページに質問のリストを表示するには、Linq2Sqlクエリから入力したいこのクラスがあります
問題は、Tag コレクションをどのように埋めるかです。これは 1 つのクエリでは実行できないことがわかったので、これを 2 つのクエリに分割しました。many:many が Entity フレームワークでサポートされていることは知っていますが、どのようにサポートしていますか? これをどのように行いますか?代替アプローチはありますか?もちろん、クエリは効率的でなければなりません。
sql - 多対多のテーブル外部結合をどのように行いますか?
foo、foo2bar、barの3つのテーブルがあります。foo2barは、fooとbarの間の多対多のマップです。内容はこちらです。
私が要求したいのは、「zidが30のすべてのfidと値のリストを教えてください」です。
私はすべてのfidに対する答えを期待しているので、結果は次のようになります。
.net - Entity Framework でエンティティからそれ自体への多対多の関連付けを実装するにはどうすればよいですか?
同じ型の子のコレクションを公開するエンティティがあります。エンティティは、それ自体が別のインスタンスの子になることができます。つまり、エンティティ自体との多対多の関係になります。データベースには、parentId と childId の 2 つの列を持つリンカー テーブルがあり、どちらもエンティティ テーブルの Id 列を参照しています。Entity Framework は、それ自体が多対多の関係であることを正しく認識しますが、エラーをスローします。
行 249、300 から始まるフラグメントのマッピングの問題: 異なるキーを持つ可能性のある 2 つのエンティティが同じ行にマッピングされています。これら 2 つのマッピング フラグメントが、AssociationSet の両端を対応する列にマップしていることを確認します。
これを達成する方法はありますか?
c# - NHibernateでコレクションを初期化せずに多対多の関係を追加することは可能ですか?
これが私のクラスです:
これが私のマッピングです:
ここに問題があります:
最後の行[user.Friends.Add(friend)]で、新しい友達を追加する前に、Friendsコレクションが初期化されることに気付きました。
私の質問は:NHibernateでこの動作を回避する方法はありますか?パフォーマンス上の理由から、INSERTコマンドを1つだけ実行したいからです。