2017-07-14 1 views
3

Ich benutze Spring-Boot 1.5.4 mit Feder-Daten-Jpa und ich versuche, den automatisch generierten Fremdschlüssel-Namen während spring.jpa.hibernate.ddl-auto=create zu überschreiben.Überschreiben Sie den fremden Schlüsselname, der auf zusammengesetzten Schlüssel verweist JPA/Hibernate

Für einfache id konnte ich es außer Kraft zu setzen: simple_fk

Hibernate: alter table my_entity add constraint simple_fk foreign key (simple_id) references simple 

Aber nicht für Fremdschlüssel mit Composite-ID: FKms12cl9ma3dk8egqok1dasnfq

Hibernate: alter table my_entity add constraint FKms12cl9ma3dk8egqok1dasnfq foreign key (composite_id1, composite_id2) references composite 

Was mit meinem Code falsch? Ich habe auch versucht @PrimaryKeyJoinColumn.

Bitte beachten Sie die Klassendefinitionen unten.

@Entity 
public class Simple { 
    @Id 
    private long id; 
} 

@Entity 
public class Composite { 
    @Id 
    private CompositeId id; 
} 

@Embeddable 
public class CompositeId { 
    @Column 
    private long id1; 
    @Column 
    private long id2; 
} 

@Entity 
public class MyEntity { 
    @ManyToOne 
    @JoinColumn(foreignKey = @ForeignKey(name = "simple_fk"), 
     name = "simple_id", referencedColumnName = "id") 
    private Simple simple; 

    @ManyToOne 
    @JoinColumns(foreignKey = @ForeignKey(name = "composite_fk"), value = { 
     @JoinColumn(name = "composite_id1", referencedColumnName = "id1"), 
     @JoinColumn(name = "composite_id2", referencedColumnName = "id2") 
    }) 
    private Composite composite; 
} 

Antwort

1

Dies ist ein known issue mit dem Hibernate ist, die es zwei Möglichkeiten, fix in der Version 5.2.8 gibt es

So war zu beheben: Entweder Sie den Ruhezustand auf die Version 5.2.8 oder bis aktualisieren durch Hinzufügen

<hibernate.version>5.2.10.Final</hibernate.version> 

zu Ihrer pom.xml, die im Grunde wird der Hibernate auf die neueste Version zu aktualisieren.

oder Hibernate-Update nicht möglich ist, oder ist einfach zu riskant Sie Vermächtnis hinzufügen/veraltet @org.hibernate.annotations.ForeignKey(name = "composite_fk") Anmerkung auf Ihrem composite Feld, das werden Sie Code aussehen wie

@Entity 
public class MyEntity { 
    @ManyToOne 
    @JoinColumn(foreignKey = @ForeignKey(name = "simple_fk"), name = "simple_id", referencedColumnName = "id") 
    private Simple simple; 

    @ManyToOne 
    @JoinColumns(foreignKey = @ForeignKey(name = "composite_fk"), value = { 
     @JoinColumn(name = "composite_id1", referencedColumnName = "id1"), 
     @JoinColumn(name = "composite_id2", referencedColumnName = "id2") }) 
    @org.hibernate.annotations.ForeignKey(name = "composite_fk") 
    private Composite composite; 
} 
machen
Verwandte Themen