私はアプリケーションエンティティを持って、JPAの属性との自己双方向の関係を表現したい。 EX。上記の方法は、関係がManyToManyではあるが、自己ではない場合にうまく機能します(ex。 App2DBまたはApp2BizCase) アプリケーションエンティティの属性を持つ自己双方向ManyToMany関係の場合。私はここで自己ManyToMany JPA 2.0を使用して追加の列を持つ
App 1--One2Many--* App2AppLink *--ManyToOne-1 App
(Provider 1--One2Many--* App2AppLink *--ManyToOne-1 Consumer)
のような2つのOneToMany関係にそれを分解するアプリケーションエンティティは、ここで
@Entity
public class ApplicationEO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
/**
* This application instance services are consumed by Set<App2AppLinkEO> applications connections/links
*/
@OneToMany(mappedBy = "provider")
private Set<App2AppLinkEO> consumberLinks;
/**
* This application instance consumes services by Set<App2AppLinkEO> applications connections/links
*/
@OneToMany(mappedBy = "consumer")
private Set<App2AppLinkEO> providerLinks;
}
あるアプリケーションは、アプリケーション関係テーブルに
@Entity
@Table(name="APP2APPLINK")
public class App2AppLinkEO {
@EmbeddedId
@AttributeOverrides({@AttributeOverride(name = "entity1Id", column = @Column(name = "PROVIDER_ID")),
@AttributeOverride(name = "entity2Id", column = @Column(name = "CONSUMBER_ID"))})
private CompositePK id;
@ManyToOne(optional = false)
private ApplicationEO providerApp;
@ManyToOne(optional = false)
private ApplicationEO consumerApp;
private String service;
private String status;
private String platform;
}
です
そして、ここで複合主キーコード設定の上
@Embeddable
public class CompositePK implements Serializable {
private long entity1Id;
private long entity2Id;
}
あるとして関係テーブルを生成します。
CREATE TABLE APP2APPLINK (
PLATFORM VARCHAR(255),
STATUS VARCHAR(255),
SERVICE VARCHAR(255),
PROVIDER_ID BIGINT NOT NULL,
CONSUMBER_ID BIGINT NOT NULL,
CONSUMERAPP_ID BIGINT,
PROVIDERAPP_ID BIGINT,
PRIMARY KEY (PROVIDER_ID, CONSUMBER_ID))
しかし、なぜ私はそこに余分な列の下に見ていますか?
CONSUMERAPP_ID BIGINT,
PROVIDERAPP_ID BIGINT,
ありがとうございました。 –