在继承 class 中创建一个对象从数据库 java 中的 superclass null 设置属性
Creating an object in inherited class sets attribute from superclass null in database java
对于一个学校项目,我必须制作一个图书馆系统,其中包含不同的物品,如书籍、dvds、cds...所以我决定制作一个超级class 物品,每个物品都具有重复出现的属性.属性名称是荷兰语(名称、主题、可用、...),但您应该了解总体思路
package domein;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({
@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i"),
@NamedQuery(name = "Item.findAllBeschikbaar", query = "SELECT i FROM Item i WHERE i.beschikbaar = 1")
})
public abstract class Item implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String naam;
private String uitgever;
@Column(length = 1024)
private String beschrijving;
private String leeftijd;
private String thema;
private boolean beschikbaar;
public Item(){};
public Item(String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
this.uitgever = uitgever;
this.beschrijving = beschrijving;
this.thema = thema;
this.leeftijd = leeftijd;
beschikbaar = true;
};
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNaam() {
return naam;
}
public void setNaam(String naam) {
this.naam = naam;
}
public String getUitgever() {
return uitgever;
}
public void setUitgever(String uitgever) {
this.uitgever = uitgever;
}
public String getBeschrijving() {
return beschrijving;
}
public void setBeschrijving(String beschrijving) {
this.beschrijving = beschrijving;
}
public String getLeeftijd() {
return leeftijd;
}
public void setLeeftijd(String leeftijd) {
this.leeftijd = leeftijd;
}
public String getThema() {
return thema;
}
public void setThemas(String thema) {
this.thema = thema;
}
public boolean isBeschikbaar() {
return beschikbaar;
}
public void setBeschikbaar(boolean beschikbaar) {
this.beschikbaar = beschikbaar;
}
@Override
public String toString() {
return getNaam();
}
}
现在举例子class,这是class书
package domein;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.NamedQuery;
@Entity
@NamedQuery(name = "findAllBoeken", query = "SELECT b FROM Boek b")
public class Boek extends Item implements Serializable
{
private String auteur;
protected Boek()
{
super();
}
public Boek(String auteur, String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
super(naam, uitgever, beschrijving, thema, leeftijd);
this.auteur = auteur;
}
public String getAuteur() {
return auteur;
}
public void setAuteur(String auteur) {
this.auteur = auteur;
}
@Override
public String toString() {
return super.getNaam() + " - " + getAuteur();
}
}
我遇到的问题如下。在我的程序的 gui 中创建一本新书时没有错误,系统设置为 return: "Book: " + txtTitel.getText() + "succesfully added."
private void addBoek()
{
ItemRepository repository = new ItemRepository();
repository.create(new Boek(txtAuteur.getText(),txtTitel.getText(),txtUitgeverij.getText(), txtBeschrijving.getText(),txtThema.getText() ,txtLeeftijd.getText()));
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Boek toegevoegd");
alert.setHeaderText(null);
alert.setContentText("Het boek: " + txtTitel.getText() + " is toegevoegd aan de databank en kan nu worden uitgeleend.");
alert.showAndWait();
}
但是当我在 Items 选项卡中进入数据库时,所有字段都具有正确的值,除了 Name/Title 具有值。这很烦人,因为您可以在其中搜索该项目是否可用的页面显示了一个列表,该列表完全充满了 Book: null by author x 或 DVD: null from Spielberg
欢迎所有帮助,提前致谢
在你的构造函数中我想你忘了初始化名字:
public Item(String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
this.uitgever = uitgever;
this.beschrijving = beschrijving;
this.thema = thema;
this.leeftijd = leeftijd;
beschikbaar = true;
this.naam = naam; // HERE
};
对于一个学校项目,我必须制作一个图书馆系统,其中包含不同的物品,如书籍、dvds、cds...所以我决定制作一个超级class 物品,每个物品都具有重复出现的属性.属性名称是荷兰语(名称、主题、可用、...),但您应该了解总体思路
package domein;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({
@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i"),
@NamedQuery(name = "Item.findAllBeschikbaar", query = "SELECT i FROM Item i WHERE i.beschikbaar = 1")
})
public abstract class Item implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String naam;
private String uitgever;
@Column(length = 1024)
private String beschrijving;
private String leeftijd;
private String thema;
private boolean beschikbaar;
public Item(){};
public Item(String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
this.uitgever = uitgever;
this.beschrijving = beschrijving;
this.thema = thema;
this.leeftijd = leeftijd;
beschikbaar = true;
};
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNaam() {
return naam;
}
public void setNaam(String naam) {
this.naam = naam;
}
public String getUitgever() {
return uitgever;
}
public void setUitgever(String uitgever) {
this.uitgever = uitgever;
}
public String getBeschrijving() {
return beschrijving;
}
public void setBeschrijving(String beschrijving) {
this.beschrijving = beschrijving;
}
public String getLeeftijd() {
return leeftijd;
}
public void setLeeftijd(String leeftijd) {
this.leeftijd = leeftijd;
}
public String getThema() {
return thema;
}
public void setThemas(String thema) {
this.thema = thema;
}
public boolean isBeschikbaar() {
return beschikbaar;
}
public void setBeschikbaar(boolean beschikbaar) {
this.beschikbaar = beschikbaar;
}
@Override
public String toString() {
return getNaam();
}
}
现在举例子class,这是class书
package domein;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.NamedQuery;
@Entity
@NamedQuery(name = "findAllBoeken", query = "SELECT b FROM Boek b")
public class Boek extends Item implements Serializable
{
private String auteur;
protected Boek()
{
super();
}
public Boek(String auteur, String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
super(naam, uitgever, beschrijving, thema, leeftijd);
this.auteur = auteur;
}
public String getAuteur() {
return auteur;
}
public void setAuteur(String auteur) {
this.auteur = auteur;
}
@Override
public String toString() {
return super.getNaam() + " - " + getAuteur();
}
}
我遇到的问题如下。在我的程序的 gui 中创建一本新书时没有错误,系统设置为 return: "Book: " + txtTitel.getText() + "succesfully added."
private void addBoek()
{
ItemRepository repository = new ItemRepository();
repository.create(new Boek(txtAuteur.getText(),txtTitel.getText(),txtUitgeverij.getText(), txtBeschrijving.getText(),txtThema.getText() ,txtLeeftijd.getText()));
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Boek toegevoegd");
alert.setHeaderText(null);
alert.setContentText("Het boek: " + txtTitel.getText() + " is toegevoegd aan de databank en kan nu worden uitgeleend.");
alert.showAndWait();
}
但是当我在 Items 选项卡中进入数据库时,所有字段都具有正确的值,除了 Name/Title 具有值。这很烦人,因为您可以在其中搜索该项目是否可用的页面显示了一个列表,该列表完全充满了 Book: null by author x 或 DVD: null from Spielberg
欢迎所有帮助,提前致谢
在你的构造函数中我想你忘了初始化名字:
public Item(String naam, String uitgever, String beschrijving, String thema,String leeftijd)
{
this.uitgever = uitgever;
this.beschrijving = beschrijving;
this.thema = thema;
this.leeftijd = leeftijd;
beschikbaar = true;
this.naam = naam; // HERE
};