2016-08-03 35 views
0

Ich habe Code wie dieseHinzufügen von Verbund Foreign Key JPA mit

@ManyToOne 
@ForeignKey(name = "FK_RF_REPLEG") 
@JoinColumns({ 
     @JoinColumn(name="CD_COTIEN", referencedColumnName = "CD_COTIEN", insertable=false, updatable = false), 
     @JoinColumn(name="CD_CODENT", referencedColumnName = "CD_CODENT", insertable=false, updatable = false), 
     @JoinColumn(name="CD_TIPOID", referencedColumnName = "CD_TIPOID", insertable=false, updatable = false), 
     @JoinColumn(name="NR_IDENTI", referencedColumnName = "NR_IDENTI", insertable=false, updatable = false), 
     @JoinColumn(name="FC_INICIAL", referencedColumnName = "FC_INICIAL", insertable=false, updatable = false) 
}) 
public RepresentanteLegal getRepresentanteLegal() { 
    return representanteLegal; 
} 

Dieser Code die nächste SQL-Abfrage auszuführen versucht:

alter table RNREPRES_FACULTAD add constraint FK_RF_REPLEG foreign key (CD_CODENT, CD_COTIEN, CD_TIPOID, FC_INICIAL, NR_IDENTI) references RNREPLEG_INT

mit dem nächsten Fehler:

02267. 00000 - "column type incompatible with referenced column type" 

Danach habe ich festgestellt, wenn ich die Abfrage direkt in meiner Datenbank mit einer anderen Co ausführen lumns Reihenfolge in der Abfrage, so etwas wie folgt aus:

alter table RNREPRES_FACULTAD add constraint FK_RF_REPLEG foreign key (CD_COTIEN, CD_CODENT, CD_TIPOID, NR_IDENTI, FC_INICIAL) references RNREPLEG_INT

Diese Abfrage funktioniert ziemlich gut.

Mein Problem ist, dass ich nicht weiß, wo ich die Reihenfolge der Join-Spalten ändern muss, um die richtige Abfrage von JPA zu erhalten.

Antwort

0

Ich kann Ihr Problem nicht reproduzieren. Hier ist mein Code:

@MappedSuperclass 
public class ABaseEntity { 

private int id; 

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

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

RepresentanteLegal.class

@Entity 
public class RepresentanteLegal extends ABaseEntity { 

private String cotien; 

private String codent; 

private String tipoId; 

private String identi; 

private String inicial; 

@Column(name = "CD_COTIEN") 
public String getCotien() { 
    return cotien; 
} 

public void setCotien(String cotien) { 
    this.cotien = cotien; 
} 

@Column(name = "CD_CODENT") 
public String getCodent() { 
    return codent; 
} 

public void setCodent(String codent) { 
    this.codent = codent; 
} 

@Column(name = "CD_TIPOID") 
public String getTipoId() { 
    return tipoId; 
} 

public void setTipoId(String tipoId) { 
    this.tipoId = tipoId; 
} 

@Column(name = "NR_IDENTI") 
public String getIdenti() { 
    return identi; 
} 

public void setIdenti(String identi) { 
    this.identi = identi; 
} 

@Column(name = "FC_INICIAL") 
public String getInicial() { 
    return inicial; 
} 

public void setInicial(String inicial) { 
    this.inicial = inicial; 
} 
} 

Student.class

@Entity 
public class Student extends ABaseEntity { 

private RepresentanteLegal representanteLegal; 

@ManyToOne 
@JoinColumns(value = { 
     @JoinColumn(name = "CD_COTIEN", referencedColumnName = "CD_COTIEN", insertable = false, updatable = false), 
     @JoinColumn(name = "CD_CODENT", referencedColumnName = "CD_CODENT", insertable = false, updatable = false), 
     @JoinColumn(name = "CD_TIPOID", referencedColumnName = "CD_TIPOID", insertable = false, updatable = false), 
     @JoinColumn(name = "NR_IDENTI", referencedColumnName = "NR_IDENTI", insertable = false, updatable = false), 
     @JoinColumn(name = "FC_INICIAL", referencedColumnName = "FC_INICIAL", insertable = false, updatable = false) 
}, 
     foreignKey = 
     @ForeignKey(name = "FK_RF_REPLEG") 

) 
public RepresentanteLegal getRepresentanteLegal() { 
    return representanteLegal; 
} 

public void setRepresentanteLegal(RepresentanteLegal representanteLegal) { 
    this.representanteLegal = representanteLegal; 
} 
} 

Die Tabelle in Oracle-Datenbank Fein generiert wurde. Hier ist das Skript

CREATE TABLE "SA"."STUDENT" 
    ( "ID" NUMBER(10,0) NOT NULL ENABLE, 
"CD_COTIEN" VARCHAR2(255 CHAR), 
"CD_CODENT" VARCHAR2(255 CHAR), 
"CD_TIPOID" VARCHAR2(255 CHAR), 
"NR_IDENTI" VARCHAR2(255 CHAR), 
"FC_INICIAL" VARCHAR2(255 CHAR), 
PRIMARY KEY ("ID") 
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
    TABLESPACE "USERS" ENABLE, 
    CONSTRAINT "FKNP277C0W7SX7YJO90YR7MB2NL" FOREIGN KEY ("CD_COTIEN",    "CD_CODENT", "CD_TIPOID", "NR_IDENTI", "FC_INICIAL") 
     REFERENCES "SA"."REPRESENTANTELEGAL" ("CD_COTIEN", "CD_CODENT", "CD_TIPOID", "NR_IDENTI", "FC_INICIAL") ENABLE 
    ) SEGMENT CREATION DEFERRED 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
    NOCOMPRESS LOGGING 
    TABLESPACE "USERS" ; 


CREATE TABLE "SA"."REPRESENTANTELEGAL" 
    ( "ID" NUMBER(10,0) NOT NULL ENABLE, 
"CD_CODENT" VARCHAR2(255 CHAR), 
"CD_COTIEN" VARCHAR2(255 CHAR), 
"NR_IDENTI" VARCHAR2(255 CHAR), 
"FC_INICIAL" VARCHAR2(255 CHAR), 
"CD_TIPOID" VARCHAR2(255 CHAR), 
PRIMARY KEY ("ID") 
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
    TABLESPACE "USERS" ENABLE, 
    CONSTRAINT "UK_8PNGU2NOTPR3LP2QVS664T6Y9" UNIQUE ("CD_COTIEN", "CD_CODENT", "CD_TIPOID", "NR_IDENTI", "FC_INICIAL") 
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 121 COMPUTE STATISTICS 
    TABLESPACE "USERS" ENABLE 
    ) SEGMENT CREATION DEFERRED 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
    NOCOMPRESS LOGGING 
    TABLESPACE "USERS" ;