数据库中的JPA外键,项目中的返回对象

时间:2019-04-24 14:55:52

标签: java sql-server jpa netbeans

我正在尝试将Java应用程序连接到现有数据库。 该数据库包含具有1 Graad和Locatie的Personen。 Graad.graadNumeriek是Graad的主键,而Locatie具有自动生成的主键。

我的目标是归还所有Personen,包括Graad和Locatie。

但是,当我运行错误时,出现以下错误:

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'GRAAD_GraadNummeriek'.
Error Code: 207
Call: SELECT PersoonId, Achternaam, BackupTelefoon, Email, GeboorteDatum, Geslacht, RijksregisterNummer, Score, TelefoonNr, VerwachteDagen, Voornaam, GRAAD_GraadNummeriek, LOCATIE_LocatieId FROM Persoon
Query: ReadAllQuery(name="Persoon.getAllePersonen" referenceClass=Persoon sql="SELECT PersoonId, Achternaam, BackupTelefoon, Email, GeboorteDatum, Geslacht, RijksregisterNummer, Score, TelefoonNr, VerwachteDagen, Voornaam, GRAAD_GraadNummeriek, LOCATIE_LocatieId FROM Persoon")

我的猜测是,这与SQL在Persoon中寻找Graad_graadNumeriek有关,而不是使用键。

Persoon

@Entity
@Table(name = "Persoon")
@NamedQueries({
    @NamedQuery(name = "Persoon.getAllePersonen",
            query = "SELECT p FROM Persoon p"),
    @NamedQuery(name = "Persoon.findByName",
            query = "SELECT p FROM Persoon p WHERE p.achternaam = :persoonNaam OR p.voornaam = :persoonNaam")
})

public class Persoon implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PersoonId")
    int id;
    @Column(name = "Voornaam")
    private String voornaam;
    @Column(name = "Achternaam")
    private String achternaam;
    @Transient
    private SimpleStringProperty voornaamProperty = new SimpleStringProperty();
    @Transient
    private SimpleStringProperty achternaamProperty = new SimpleStringProperty();
    @Column(name = "GeboorteDatum")
    private String geboorteDatum;
    @Column(name = "Geslacht")
    private char geslacht;
    @Column(name = "Email")
    private String email;
    @Transient
    private String emailOuders;
    @Column(name = "RijksregisterNummer")
    private String rijksregisternummer;
    @OneToOne
    private Locatie locatie;
    @Column(name = "TelefoonNr")
    private String telefoonNummer;
    @Column(name = "BackupTelefoon")
    private String backupTelefoon;
    @ManyToOne
    private Graad graad;
    @Transient
    private SimpleStringProperty graadString = new SimpleStringProperty();
    @Column(name = "VerwachteDagen")
    private Integer verwachteDagen;
    @Transient
    private SimpleStringProperty rol = new SimpleStringProperty();
    @Column(name = "Score")
    private int score;

    public Persoon() {
    }

Graad

@Entity
public class Graad implements Serializable {
    @Id
    @Column(name = "GraadNummeriek")
    protected String graadNumeriek;
    @Column(name = "Niveau")
    protected String niveau;
    @Column(name = "FotoURL")
    protected String fotoUrl;

    public Graad() {
    }

2 个答案:

答案 0 :(得分:1)

您必须使用@JoinColumn指定指向Graad的列,JPA无法猜测您要加入的列

答案 1 :(得分:1)

您必须在@JoinColumn(name="joinedColumnName")的{​​{1}}属性中添加Graad
还要添加: Persoon class@OneToMany(mappedBy = "graad") private List<Persoon> persoons=new ArrayList<>(); 文件