JPA Внешний ключ в базе данных, вернуть объект в проект - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь подключить свое Java-приложение к существующей базе данных. База данных содержит Personen, у которого есть 1 Graad и Locatie. Graad.graadNumeriek является первичным ключом для 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 ищет Graad_graadNumeriek в Persoon вместо использования ключей.

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 ]

1 голос
/ 24 апреля 2019

Вы должны добавить @JoinColumn(name="joinedColumnName") к атрибуту Graad в Persoon class
А также добавить:
@OneToMany(mappedBy = "graad") private List<Persoon> persoons=new ArrayList<>(); в Graad файл

1 голос
/ 24 апреля 2019

Вы должны указать столбец, который указывает на Graad, с помощью @JoinColumn, JPA не может угадать столбец, к которому вы пытаетесь присоединиться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...