2016-07-19 8 views
0

私のプロジェクトにはspring-boot/spring-data-jpaが使用されています。下のエンティティは、spring.jpa.hibernate.ddl-autoが更新するように設定されているときにoracleにテーブルを作成します。私は期待してい何@ManyToMany JPAアノテーションを使用した場合の不要なユニーク制約

@Entity 
@Table(name = "SCENARIO") 
public class Scenario { 

    private Integer worksetId; 
    private Integer ruleSetId; 
    private Set<Rule> rules; 

    @Id 
    public Integer getWorksetId() { 
     return worksetId; 
    } 

    public void setWorksetId(Integer worksetId) { 
     this.worksetId = worksetId; 
    } 

    @Column(name = "RULE_SET_ID") 
    public Integer getRuleSetId() { 
     return ruleSetId; 
    } 

    public void setRuleSetId(Integer ruleSetId) { 
     this.ruleSetId = ruleSetId; 
    } 

    @ManyToMany 
    @JoinTable(name = "RULE_SET", joinColumns = @JoinColumn(name = "WORKSET_ID", referencedColumnName = "RULE_SET_ID"), inverseJoinColumns = @JoinColumn(name = "RULE_ID", referencedColumnName = "ID")) 
    public Set<Rule> getRules() { 
     return rules; 
    } 

    public void setRules(Set<Rule> rules) { 
     this.rules = rules; 
    } 

} 

@Entity 
@Table(name = "RULE") 
public class Rule { 
    private Integer id; 
    private String description; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

} 

はSCENARIO/RULEテーブルが作成されることを非常に簡単です、だけでなく、RULE_SETという名前のマッピングテーブル。テーブルSCENARIOのRULE_SET_IDに対する望ましくないユニーク制約が作成されていることを除けば、すべてうまくいくが、明らかに同じRULE_SET_IDを複数のシナリオで共有できるはずである。誰でも親切に助けてくれますか?とても有難い!!あなたがreferencedColumnName = "RULE_SET_ID"RULE_SET_IDをすれば

ところで、私は、5.0.9

答えて

1

明らかに休止状態と春ブート1.4.0を使用しています - ユニークでなければなりません。

あなたは

が、私は一連のルールのためRuleSetエンティティを使用したいScenario

@Entity 
@Table(name = "SCENARIO") 
public class Scenario { 

    @Id 
    @GeneratedValue 
    private Integer id; 

} 

のサロゲートキーを使用して@ManyToManyマッピング

@ManyToMany 
@JoinTable(name = "RULE_SET", joinColumns = @JoinColumn(name = "WORKSET_ID"), 
    inverseJoinColumns = @JoinColumn(name = "RULE_ID")) 
public Set<Rule> getRules() { 
    return rules; 
} 

アップデートを使用することができます(結合テーブルを使用したマップ付き):

@Entity 
class RuleSet { 

    @OneToMany 
    private List<Rule> rules = new ArrayList<Rule>(); 

} 
+0

ご質問ありがとうございます。しかし、ロジックは、私はいくつかのルールをrule_set_idでグループ化し、同じrule_set_idを異なるシナリオで使用することができます。このように、シナリオのrule_set_idは、シナリオテーブル内で一意であってはなりません。または私は@ManyToManyを不適切に使用していますか? –

+0

@RogerZhong私は更新します。 –

+0

これはおそらく当面の唯一の回避策です。どうもありがとう! –

関連する問題