2016-05-31 5 views
0

Ich habe 2 Entität mit dem Namen Machine und MachineType. Machine kann nur eine MachineType haben, aber MachineType kann mehr als eine oder keine Machine haben. Ich probiere tonnenweise Beziehungsanmerkungen aus, aber ich vermisse etwas.Sprind Daten JPA OneToOne und ManyToOne Relations

Maschine

@Entity 
public class Machine { 

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
@Column(name = "machine_id") 
private Long machineId; 

@OneToOne(???) 
private MachineType machineType; 

@Column(name = "machine_name") 
private String MachineName; 

//getters and setters 
} 

Machine

@Entity 
public class MachineType { 

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
private Long machineTypeId; 

@ManyToOne(???) 
private List<Machine> machines; 

@Column(name = "machine_type_name") 
private String machineTypeName; 

//getters and setters 
} 

Ich verstehe nicht, mappedBy und @JoinColumn richtig und ich jetzt stecken. Wann sollte ich sie benutzen?

Antwort

1

Ich verstehe nicht, mappedBy und @JoinColumn richtig und ich jetzt stecken.

mappedBy = Beziehung Feld oder eine Eigenschaft des Unternehmens, dass der Besitzer der Beziehung ist. In diesem Beispiel ist dies das Feld Maschinentyp mit Anmerkungen versehen durch @ManyToOne Annotation.

@JoinColumn = Der Name der Fremdschlüsselspalte in der Datenbank. Dies bedeutet, dass Sie beim Definieren der Tabellen, z. B. MACHINE und MACHINE_TYPE, den Primärschlüssel der Tabelle MACHINE_TYPE in die MACHINE einfügen und dadurch eine Beziehung zwischen den Tabellen herstellen. Dieses Feld wird als Fremdschlüssel bezeichnet, da es auf einen anderen Datensatz in einer anderen Tabelle in der Datenbank verweist. Der Name dieser Spalte wird in dieser Anmerkung angegeben.

Hinweis: das mappedBy Element ist nur erforderlich, wenn Sie eine bidirektionale Beziehung wollen. Ansonsten ist es nicht erforderlich.

@Entity 
public class Machine { 

    @Id 
    @GeneratedValue 
    @Column(name = "machine_id") 
    private Long machineId; 

    @ManyToOne 
    @JoinColumn(name="name_of_foreignkey") 
    private MachineType machineType; 

    @Column(name = "machine_name") 
    private String MachineName; 

    //getters and setters 
} 

@Entity 
public class MachineType { 

    @Id 
    @GeneratedValue 
    private Long machineTypeId; 

    @OneToMany(mappedBy="machineType") 
    private List<Machine> machines; 

    @Column(name = "machine_type_name") 
    private String machineTypeName; 

    //getters and setters 
} 

I entfernt strategy = GenerationType.TABLE aus der GeneratedValue Anmerkung, weil es wie angegeben wird nicht funktionieren. Wenn Sie einen Tabellengenerator verwenden möchten (was die empfohlene Methode zum Generieren eines Primärschlüssels ist), müssen Sie mehr tun als nur die Angabe wie zuvor.

0

In Machine sollten Sie die ManyToOne-Beziehung verwenden. Wenn Sie eine bidirektionale Zuordnung wünschen, können Sie OneToMany in MachineType hinzufügen. MappedBy vs JoinColumn an ​​ beantwortet JPA JoinColumn vs mappedBy