Java 数据库中的JPA外键,返回项目中的对象
我正在尝试将Java应用程序连接到现有数据库。 数据库包含Personen,他有1个Graad和Locatie。Graad.graadNumeriek是Graad的主键,Locatie具有自动生成的主键 我的目标是回报所有人,包括他们的格拉德和洛卡蒂 但是,当我运行我的错误时,我得到以下错误:Java 数据库中的JPA外键,返回项目中的对象,java,sql-server,jpa,netbeans,Java,Sql Server,Jpa,Netbeans,我正在尝试将Java应用程序连接到现有数据库。 数据库包含Personen,他有1个Graad和Locatie。Graad.graadNumeriek是Graad的主键,Locatie具有自动生成的主键 我的目标是回报所有人,包括他们的格拉德和洛卡蒂 但是,当我运行我的错误时,我得到以下错误: Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'GRAAD_GraadN
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() {
}
您必须使用@JoinColumn指定指向Graad的列,JPA无法猜测您试图加入的列您必须将
@JoinColumn(name=“joinedColumnName”)
添加到Persoon类中的Graad
属性中
并添加:
@OneToMany(mappedBy=“graad”)
private List persoons=new ArrayList();
到Graad
文件