JPAマッピングの質問があります。ジョイント可能なJPAマッピング1対多の問題
私たちは、2つのエンティティ(SaleとPig)の間に1対多数の関係を持っています。このメッセージの終わりには、クラスがilustrateするためのクラスが続きます。
'Sale'は、システム内の多くの他のものと同様に、 'Pig'のイベントです( 'Inspection'は別の例です)。 しかし、「売り」は「豚」と一対一の関係を持つ唯一のイベントで、他のイベントは一対一の関係にあります。
したがって、「Pig」のすべてのイベントをマップするには、「PigEvent」エンティティを使用します。 ユーザーが 'Pig'をシステムに挿入すると同時に、 'PigEvent'オブジェクトを保存(挿入)します。
このエンティティ( 'PigEvent')は、Sale.getPigs()マッピングの '結合可能'のように使用します。 - 新しい 'Sale'が挿入されると、Hibernateは 'Sale'内のすべての 'Pig'に対して新しい 'PigEvent'を挿入しようとします (PigEventはすでに複製されています )が存在する - 新しい「販売」が削除されたとき、私たちはこれがあることを理解し
(これをやって、我々は他のイベント関係のデータを失う)「販売」 内のすべての「豚」の削除「PigEvent」を休止この種のマッピング(ジョイント可能な1対多)の通常の動作 JPA/HibernateがSales.getPigs()(SELECTのもの)、 を読み込むだけで、 'Sale'のINSERT、UPDATE、DELETE操作では、そのマッピング(Sale。ブタ())。
Hibernate 3.6.2を使用します。
ありがとうございます。
@Entity
public class Pig extends Persistente implements Serializable {}
@Entity
public class PigEvent extends Persistente {
@OneToOne
@JoinColumn(name="idpig")
private Pig pig;
@OneToOne
@JoinColumn(name="idapproval")
private Inspection approval
@OneToOne
@JoinColumn(name="idsale")
private Sale sale;
}
@Entity
public class Inspection extends Persistente{
@OneToOne
@JoinColumn(name="idSuino")
private Pig pig;
}
@Entity
public class Sale extends Persistente{
@MOneToMany
@JoinTable(name="e33PigEvent",[email protected](columnNames="idpig"),
joinColumns={@JoinColumn(name="idsale",insertable=false,updatable=false)},
inverseJoinColumns={@JoinColumn(name="idpig",insertable=false,updatable=false)})
public Set<Pig> getPigs() {}
}
Table Structure:
CREATE TABLE `e33Pig` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
CREATE TABLE `e33PigEvent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idPig` int(11) NOT NULL,
`idInspection` int(11) DEFAULT NULL,
`idSale` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idPig` (`idPig`),
CONSTRAINT `fk_e33eventossuino_e33aprovacao1` FOREIGN KEY (`idInspection`) REFERENCES `e33Inspection` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_e33eventossuino_e33suino1` FOREIGN KEY (`idPig`) REFERENCES `e33Pig` (`id`),
CONSTRAINT `fk_e33eventossuino_e33venda1` FOREIGN KEY (`idSale`) REFERENCES `e33Sale` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE `e33Sale` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
);
CREATE TABLE e33Inspection (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idsuino` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_e33Inspection_e33suino1` FOREIGN KEY (`idPig`) REFERENCES `e33Pig` (`id`)
) ;
したがって、PigEventエンティティをマッピングし、ManyToMany関連付けをマッピングするためのe33PigEventテーブルはありますか? OneToMany関連について、なぜManyToManyを使ってマッピングしているのですか? –
こんにちはJB、コード例で間違っていた... @OneToManyです。ありがとう – Rodrigo
あなたは最初の質問に答えませんでした。これらのエンティティはすべてどのテーブルにマップされていますか? –