2017-07-21 4 views
1

ich ein Vermächtnis Datenbank-Design mit zwei Entitäten habenFrühling booten Viele einem mit nicht Schlüssel Joinspalte nicht funktioniert

@Entity 
@Table(name = "tblRouters") 
public class Router implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "nRouterID") 
    private Integer routerId; 

    @Column(name = "strRouterName") 
    private String routerName; 

    @Column(name = "strRouterIP") 
    private String routerIp; 

    @Column(name = "strLastAutomaticCheckTime") 
    private String lastCheckTime; 

    @Column(name = "nSupportedSnmpVersion") 
    private String protocol; 

    @OneToMany(fetch =FetchType.EAGER) 
    @JoinColumn(name="strIpAddr", referencedColumnName="strRouterIP") 
    //@JoinColumn(name="strIpAddr") 
    private Set<RouterDetail> routerDetails; 
cons, getters setters.... 

und die RouterDetail Klasse

@Entity 
@Table(name = "tblRouter_Detail") 
public class RouterDetail implements Serializable { 


    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "nObjectId") 
    private Integer objectId; 

    @Column(name = "cObjectType") 
    private Character objectType; 

    @Column(name = "strSysName") 
    private String systemName; 

    @Column(name = "strDescription") 
    private String systemDescription; 

    @ManyToOne() 
    @JoinColumn(name="strRouterIP") 
    private Router router; 

Nach einigem Kampf ich es geschafft, das zu schaffen korrekte Zuordnung, die mir erlaubt, die Abfrage nach der Verwendung der referedColumnName in der @JoinColumn in Router-Klasse ausführen, aber ich brauche die Abfrage, um die Daten eifrig zu holen, so ging ich und änderte dies (auf der Router-Klasse)

@OneToMany() 

zu

@OneToMany(fetch =FetchType.EAGER) 

diese brach meinen Code mit der folgenden Ausnahme

Verursacht durch: com.microsoft.sqlserver.jdbc.SQLServerException: Ungültige Spaltenname 'strRouterIP'.

im mit Federverschluß 1.5.3 mit dieser Schnittstelle die Abfrage

public interface RouterService extends CrudRepository<Router, Integer> { 

    public Iterable<Router> findAllByRouterDetailsObjectType(Character objectType); 


} 

Was mit dieser Zuordnung auszuführen ist falsch?

+0

beitreten modifizierende Bean Parameternamen anstelle der tatsächlichen Spaltennamen zu verweisen. Ich meine, ändern Sie Code wie @ManyToOne() @JoinColumn (name = "strRouterIP") privaten Router-Router; zu @ManyToOne() @JoinColumn (name = "routerIp") privater Router-Router; – Afridi

+0

@afridi danke ich habe versucht zu tun, wie Sie vorschlagen, aber ich habe "ungültige Spaltenname 'routerIp'" – naoru

Antwort

1

konnte ich dieses Problem lösen, indem die RouterDetail Spalte dieser Versuch

@JoinColumn(name ="strIpAddr", referencedColumnName="strRouterIP") 
Verwandte Themen