2017-05-01 3 views
2

Ich versuche, dies mit Hibernate zu erreichen: table relationshipJoinColumn zu einem Fremdschlüssel

Meine Codes ist wie folgt:

Gerätemodell

@Entity 
public class Device { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(nullable = false) 
private long id; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "fk_user", nullable = true, referencedColumnName = "ID") 
private User user; 
... 
} 

Statistik Modell

@Entity 
public class Statistic { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(nullable = false) 
private long id; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumns({ @JoinColumn(name = "fk_device", nullable = false, referencedColumnName = "ID"), 
     @JoinColumn(name = "fk_device_user", nullable = false, referencedColumnName = "fk_user") }) 
private Device device; 
... 
} 

Allerdings gibt es einen Fehler zu sagen, dass es keine logische Spalte fk_user im Gerät.

Caused by: org.hibernate.MappingException: Unable to find column with logical name: fk_user in device 

Ich nehme an, es ist, weil fk_user ein Fremdschlüssel ist. Aber wie kann ich das lösen? Vielen Dank.

Antwort

2

auf Sie Schema Basierend ich das Gerät Entität Karte würde wie folgt:

public class Devince {

@ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "user_id", nullable = true) 
    private User user; 
    ... 
    } 

}

Sie brauchen nicht die referencedColumnName, wie Sie auf die User Entität beziehen, werden Primärschlüssel. Wenn Sie auf die Nicht-Primärschlüsselspalte verweisen würden, wäre dies notwendig.

In Bezug auf die Statistik Einheit:

public class Statistic { 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumns({ @JoinColumn(name = "device_id", nullable = false), 
     @JoinColumn(name = "device_user_id", nullable = false, 
    referencedColumnName = "user_id") }) 
    ... 
    } 
} 

Auch hier müssen Sie nur die referencesColumnName in der zweiten @JoinColumn.

+0

Vielen Dank für Ihren Vorschlag. Ich habe den ersten 'referencesColumnName' in' @ JoinColumn' entfernt, bekomme aber immer noch die Fehlermeldung 'Caused by: org.hibernate.MappingException: Spalte mit logischem Namen kann nicht gefunden werden: user_id in device'. – Chiu

Verwandte Themen