問題タブ [self-reference]
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.
ruby-on-rails - 自己参照関連による has_many
(例として)has_many
人の友人によるすべての投稿への関連付けを作成しhas_many :remote_posts
たいperson > friends > person > posts
.
..これが私がそれについて行く方法です
今、
...そして、このエラーが発生します..
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: people.person_id: SELECT "posts".* FROM "posts" INNER JOIN "people" ON "posts".person_id = "people".id WHERE (("people".person_id = 1))
外部キーエラーは別として、友情協会がまったく機能していないようです。:source => :posts
関連付けが 2 回行われるため、これは のせいではないかと考えてposts
いました。
finder sql を書くこともできます (それが現在私が取り組んでいるものです) が、もっと早くこの方法で書きたいと思います。
これを機能させる方法のアイデアはありますか?
cocoa - コアデータ:自己参照プロパティを持つエンティティの移行
私のCoreDataモデルには、2つの自己参照関係を持つエンティティShapeが含まれています。これは、4つのプロパティを意味します。1つのペアは1対多の関係(Shape.containedBy <->> Shape.contains)であり、もう1つのペアは多対多の関係(Shape.nextShapes <<->> Shape.previousShapes)です。それはすべてアプリケーションで完全に機能するので、自己参照関係は一般的に問題ではないと思います。
ただし、モデルを新しいバージョンに移行する場合、Xcodeは自動生成されたマッピングモデルのコンパイルに失敗し、次のエラーメッセージが表示されます。
'contains'は、自己参照プロパティの1つの名前です。とにかく、本当に大きな問題は、マッピングモデルを表示するときにエンティティマッピングを選択するとすぐにXcodeがクラッシュするため、このマッピングプロパティを見ることさえできないことです。だから私はここからどこへ行くのか本当に迷っています。自己参照プロパティを実際に削除できないので、コンパイルするマッピングモデルを手動で作成する必要があると思いますか?何か案は?
乾杯
python - モジュール自体内のモジュールへの参照を取得する方法は?
そのモジュール内からモジュールへの参照を取得するにはどうすればよいですか? また、そのモジュールを含むパッケージへの参照を取得するにはどうすればよいですか?
.net - 何もしないステートメントが例外をスローしない (または開発者に警告しない) のはなぜですか?
自己参照しているように見える VB.NET のステートメント (この効果が C# に存在するかどうかはわかりません) に何度か噛まれましたが、それらが実行されても実際には何もしません。ターゲットと 1 が提供されていません。例えば:
どちらの場合も、ステートメントが結果を代入するターゲットを必要とすることは .NET を悩ませているようには見えません。IDE/コンパイラがこの影響について警告しない、または例外「Statement DoestDoAnything」がスローされない理由はありますか? コードは何も変更しないように作成されているため、明らかに入力ミスです。
java - Hibernate3: 自己参照オブジェクト
これを行う方法を理解するための助けが必要です。ファイルシステムで再帰的な「検索」を実行する予定で、自己参照階層構造を持つ単一の DB テーブルに情報を保持したいと考えています。
これは、入力したい DB テーブル構造です。
DirObject テーブル:
マップしたい提案されたJavaクラスは次のとおりです(フィールドのみが表示されます):
「ルート」ディレクトリの場合、parentid=0 を使用する予定でした。実際の ID は 1 から始まります。理想的には、休止状態で ID を自動生成したいと考えています。
誰かがこれに推奨されるマッピング ファイルを提供できますか? 二次的な質問として、代わりに次のように Java クラスを実行することを考えました。
これら 2 つの方法のどちらにも同じデータ モデルを使用できますか? (もちろん、別のマッピング ファイルを使用)。
--- 更新: そこで、以下に提案されているマッピング ファイルを試しました (ありがとう!)。ここで参照用に繰り返します:
...そして Java クラスを変更して、'parentid' と 'getSubDirs' の両方を持つようにしました ['HashSet' を返す]。
これは機能しているように見えます-ありがとう、これは私がこれを駆動するために使用したテストコードです-私はここで何かをしていないと思います.これは明示的に?
ruby-on-rails - Rails2.3での自己参照の関連付け
私はtestというモデルを持っていますが、testには多くのテストを含めることができ、親テストが存在する場合はその親テストへの参照を持つことができるはずです。例えば
- テスト<-親が存在しません
- テスト
- テスト
- テスト
- テスト
- テスト
- テスト
- テスト
- テスト
- テスト
- テスト<-親が存在しません
2.3より前の例でいくつかの可能な解決策を見てきましたが、モデルが参照を処理する方法は2.0以降大きく変わったようです。誰かが2.3の気の利いたものでこれを行うための最良のルートオプションを持っているかどうか疑問に思いました。助言がありますか?
cakephp - Cakephpの自己参照HABTMの編集は、時々機能します
参加者との自己参照HABTMモデルを使用しています。イベントにサインアップすると、予約/プロファイルにログインすると、他の参加者のリストが表示され、自分や他の人をさまざまなグループに追加することを選択できます。ホテルの部屋を共有したり、空港からの交通手段を共有したりします。
私がこれまでに管理したこと:
1)プロファイルに、チェックボックスが付いた他のすべての参加者のリストが表示されます。これまでのところ素晴らしい。
2)別の参加者を追加すると正常に機能します。次に編集すると、追加した参加者がチェック済みとして表示されます。
3)送信する前に参加者を確認している限り、別の参加者を削除しても問題ありません。
繰り返しますが、言葉で:
参加者は3名です。私はそのうちの1人としてログインしており、参加者リストに他の2人が表示されています。私はそれらの両方をチェックすることにしました。これは(常に)正常に機能します。後で私はそれらの1つを削除することを選択します(チェックボックスをオフにして送信を押すことによって)。これも(常に)正常に機能します。最後のチェックボックスを削除したい場合...何も更新されません(常に!)。不思議なことに、参加者の奇妙な組み合わせを追加および削除でき、一度にすべての参加者を削除することを選択しない限り、常に機能します(唯一の参加者を削除することは、「チェックされたすべての参加者を削除する」という特殊なケースです)。
私の知る限り、HABTMは、最初にすべてのリレーションを削除してから、それらを再保存することで機能します。同じ参加者を何度も削除、追加、削除、追加すると、テーブルでHABTMテーブルのIDが常に増加していることがわかります。ただし、一度にすべての参加者の選択を解除すると、関係が更新されません。IDは同じままなので、保存が行われなかったようです。
この振る舞いは非常に特殊で独特であり、ここで明らかな何かが欠けているような気がします。とにかく、関連するコードは次のとおりです。
モデル
コントローラ
意見
ここにあるわずかに変更されたヘルパーhabtmCheckBoxesを使用しています:http ://cakeforge.org/snippet/detail.php?type = snippet&id = 190これは次のように機能します:function habtmCheckBoxes($ rows = array()、$ selectedArr = array()、$ modelName、$ wrapTag ='p'、$ checkedDiv、$ uncheckedDiv){}
mysql - 自己参照テーブルからの親のステータスの取得
次のテーブルがあるとします:items(item_id、item_parent)...そしてitem_parentがitem_idを参照するので、それは自己参照テーブルです。
どのMySQLがサポートするSQLクエリを使用して、テーブル内の各アイテムを、そのアイテムが親であるか、またはそれを参照する他のアイテムがあるかどうかを示すブール値とともにSELECTしますか?
表に次のデータがある場合:
...クエリは、次のオブジェクトのセットを取得できる必要があります。
{"item_id":1、 "is_parent":0}
{"item_id":2、 "is_parent":1}
{"item_id":3、 "is_parent":1}
{"item_id":4、 "is_parent": 0}
{"item_id":5、 "is_parent":0}
fluent-nhibernate - Fluent NHibernate 自己参照多対多
私は、RelatedBooks という書籍のリストを持つことができる Books というエンティティを持っています。
省略された Book エンティティは次のようになります。
この関係のマッピングは次のようになります
次に、RelatedBooks テーブルに生成されるデータのサンプルを示します。
本を削除しようとすると問題が発生します。ID が 1 の本を削除すると、すべてが正常に機能し、RelatedBooks テーブルから対応する 2 つのレコードが削除されます。ただし、ID が 3 の本を削除しようとすると、「DELETE ステートメントが REFERENCE 制約 "FK5B54405174BAB605" と競合しています。データベース "Test"、テーブル "dbo.RelatedBooks"、列 'RelatedBookId で競合が発生しました」というエラーが表示されます。 」。
基本的に、RelatedBookId が 3 の RelatedBooks テーブルのレコードは削除されないため、Book を削除できません。
本を削除するときにそのレコードを削除するにはどうすればよいですか?
編集
Cascade を SaveUpdate() から All() に変更した後、ID が 3 の Book を削除しようとすると、同じ問題が引き続き発生します。また、Cascade を All() に設定し、ID が 1 の Book を削除すると、次に、3冊すべて(ID:1、2、および3)が削除されるため、それも機能しません。
ID 3 の Book を削除するときに Book.Delete() メソッドが呼び出されたときに実行される SQL を見ると、SELECT ステートメントが間違った列を参照しているように見えます (これは、SQL DELETE ステートメントが同じ間違いを犯す可能性があるため、そのレコードを削除することはありません)。RelatedBook の SQL は次のとおりです。
特定のケースでは、WHERE ステートメントは次のようになります。
解決
すべてのケースで機能させるために私がしなければならなかったことは次のとおりです
マッピング:
コード:
entity-framework - Entity Framework 自己参照階層多対多
OK、この問題にはすべてがあります。
概念的には、多くの子リソースと多くの親リソースを持つことができる Resource エンティティがあります。Resource テーブルには ID と Name の 2 つのフィールドがあり、ID が主キーです。
多対多の関係を完成させるために、2 つのフィールド (Parent_ID、Child_ID) と、それぞれが Resource テーブル (ID) の主キーを参照する 2 つの外部キーを持つ ResourceHierarchy テーブルを作成しました。ResourceHierarchy テーブルには、次の複合主キーがあります。 (親_ID、子_ID)
各リソースが他のリソースの親または子として機能できることは既にわかっていますが、論理的にはすべてのリソースが親を持つわけではありませんが、それは重要ではありません。例として、リソース テーブルに次のリソースがあるとします。
ResourceHierarchy テーブルには、次の関係があります。
次に、Entity Framework が Entity を生成します。
edmx ファイルで生成されたコードを確認すると、ResourceHierarchy テーブルがリレーションシップとして扱われており、ResourceHierarchy テーブルはエンティティとして扱われていないため、コードからアクセスできないことがわかります。
これが私が望んでいたすべてであれば、それは完全にうまくいくでしょう.
ただし、リソースエンティティ階層に数量列を追加したいときに問題が発生します。たとえば、小さな家には 1 つの正面玄関と 1 つの屋根しかありませんが、屋根とタイルのモンスター リソースには多くの屋根タイルがあります。
したがって、Quantity 列を Resource テーブルに追加すると、次のようになります。
これにより、屋根とタイルのモンスターが 5 つの屋根タイルを共有しなければならないという問題が生じます。したがって、当然のことながら、数量列を ResourceHierarchy テーブルに追加しようとしますが、これを行って生成されたコードを更新するとすぐに、ResourceHierarchy テーブルが以前のように関係ではなくエンティティとして扱われます。リソース テーブルに戻るには、この非概念的な「エンティティ/リレーションシップ」を確認する必要がありますが、これはあまり単純ではありません。リソースエンティティに戻るためにのみ使用されるエンティティが概念モデルにあるようで、Resource.Children.Add(r) がデータベースの ResourceHierarchy テーブルに新しい行を作成するかどうかさえわかりません. 関係としてのみ使用しているエンティティから、プロパティ、つまり数量を選択するようなものです。
理想的には、ResourceHierarchy テーブルの Quantity 列は次のようになります。
そして、Resource Entity はまだ Children、Parents ナビゲーション プロパティを持ち、Resource Entity のプロパティとして Quantity 列に何らかの方法でアクセスします。
数量列があり、数量列がない場合に生成されたコードをマージしようとしましたが、例外がスローされ、ResourceHierarchy テーブルはリレーションシップまたはエンティティのいずれかであると解釈されますが、両方ではありません。
助けてください!
edmx は、db の ResourceHierarchy テーブルの数量列の追加と除外によって大幅に変更されます。
次に比較例を示します。唯一の違いは、Resource が ResourceType であり、ResourceHierarchy が ResourceTypeHierarchy であることです。
SSDL ストレージ モデルには、ResourceTypeHierarchy EntityType の 1 つの追加のプロパティを除いて変更がないため、以下には含めません。
RESOURCETYPEHIERARCHY に QUANTITY 列がありません
リソースタイプ階層は関係です
RESOURCETYPEHIERARCHY の QUANTITY 列を使用
RESOURCETYPEHIERARCHY はエンティティになりました