在继承 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
 };