2016-07-19 24 views
0

Ich verwende Spring-Boot/Feder-Daten-Jpa für mein Projekt. Die folgenden Entitäten erstellen Tabellen in Oracle, wenn spring.jpa.hibernate.ddl-auto auf "update" gesetzt ist.Unerwünschte eindeutige Einschränkung bei der Verwendung von @ManyToMany JPA Annotation

@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; 
    } 

} 

Was ich erwarte ist ziemlich einfach, dass SZENARIO/Regeltabelle sowie eine Zuordnungstabelle namens RULE_SET erstellt wird. Alles funktioniert gut, außer dass eine unerwünschte eindeutige Einschränkung für RULE_SET_ID in der Tabelle SCENARIO erstellt wird, aber offensichtlich sollte dieselbe RULE_SET_ID für mehrere Szenarien verwendet werden können. Könnte jemand freundlich helfen? Sehr geschätzt !!

BTW, ich bin mit Feder-Boot-1.4.0 mit Hibernate 5.0.9

Antwort

1

Selbstverständlich, wenn Sie referencedColumnName = "RULE_SET_ID" tun, RULE_SET_ID - sollte eindeutig sein.

können Sie einen Ersatzschlüssel verwenden für Scenario

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

    @Id 
    @GeneratedValue 
    private Integer id; 

} 

und verwenden eine @ManyToMany Mapping

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

aktualisieren

Ich möchte RuleSet Stelle, welche eine Reihe von Regeln verwenden, (mit einer Abbildung unter Verwendung einer Verbindungstabelle):

@Entity 
class RuleSet { 

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

} 
+0

Danke für Ihre schnelle Antwort! Die Logik ist jedoch, ich habe mehrere Regeln gruppiert mit rule_set_id und die gleiche rule_set_id kann in verschiedenen Szenarien verwendet werden. Wenn dies gesagt wird, sollte rule_set_id im Szenario in der Szenariotabelle nicht eindeutig sein. Oder verwende ich @ManyToMany nicht richtig? –

+0

@RogerZhong Ich aktualisiere. –

+0

Das ist wahrscheinlich die einzige Problemumgehung für die Zeit. Danke vielmals! –

Verwandte Themen