Hibernate试图插入到没有';甚至不存在于JavaWeb应用程序中

Hibernate试图插入到没有';甚至不存在于JavaWeb应用程序中,java,sql,hibernate,h2,dao,Java,Sql,Hibernate,H2,Dao,嗨,我正在尝试开发一个web应用程序,并且正在使用h2数据库。现在我正在学习一个类,它应该在我的表“Bewerteateabaen”中保存“Bewerteateabaen” 这是用于添加“bewertetetabage”的bean: 现在,当我尝试添加“bewerteteAbgabe”时,我得到以下消息: Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "BEWERTETEABGABE_STUDENT" no

嗨,我正在尝试开发一个web应用程序,并且正在使用h2数据库。现在我正在学习一个类,它应该在我的表“Bewerteateabaen”中保存“Bewerteateabaen”

这是用于添加“bewertetetabage”的bean:

现在,当我尝试添加“bewerteteAbgabe”时,我得到以下消息:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "BEWERTETEABGABE_STUDENT" not found; SQL statement:
insert into BEWERTETEABGABE_STUDENT (BewerteteAbgabe_ID, studenten_EMAIL) values (?, ?) [42102-200]
这是一个甚至不存在的表。
欢迎提供任何帮助,因为我已经尝试解决这个问题好几个小时了

您的
bewertetababe
类和
学生
类之间定义了一个多对多关系

@Setter
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.ALL})
@Fetch(值=FetchMode.SUBSELECT)
私人名单学生;
Hibernate试图用一个关系表对这种关系建模,该表包含每对学生和测试的一个条目。 该表将根据其连接的两个对象自动命名

尝试并创建表格,保存一些学生在其中的
bewertetetababe
。您将在该表中看到类之间的连接


看一看。还有更详细的解释。

谢谢您的回答。我已经添加了表,当我保存一个bewertetetabage时,另一个abgabe正在被保存,您可能知道这是为什么吗?您有一个带有
@manytone
@JoinColumn
注释的字段
abgabe
。保存包含Abgabe的BewerteteAbgabe时,Abgabe也会保存。原因是级联类型。全部。对父对象的所有操作都会传播到子对象。
@Entity
@Table(name = "BEWERTETEABGABE")
@NoArgsConstructor
public class BewerteteAbgabe {
    /**
     * ID einer bewerteten Abgabe
     */
    @Id
    @NonNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int ID;

    /**
     * Abgabe, die bewertet wird
     */
    @JoinColumn(name = "ABGABE")
    @Getter
    @Setter
    @ManyToOne(cascade = {CascadeType.ALL})
    private Abgabe abgabe;

    /**
     * Studenten, fuer die die Abgabe bewertet wird
     */
    @Setter
    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Student> studenten;

    /**
     * Tutoren, die bewerten
     */
    @Setter
    @Transient //TODO: Hier muss eine neue Tabelle eingefügt werden.
    private List<User> tutoren;

    /**
     * Kommentar zur Bewertung
     */
    @Getter
    @Setter
    @NotBlank
    @NonNull
    @Column(name = "KOMMENTAR")
    private String kommentar;

    /**
     * Abgabenresultat eines Studenten
     */
    @Getter
    @Setter
    //@Column(name = "RESULTAT")
    @Transient //TODO: Neue Resultat-Tabelle joinen
    private ZwischenBewertung.Resultat resultat;

    /**
     * Map zwischen der Aufgabe und ihrer Bewertung
     */
    @Transient //TODO: Hier muss eine neue Tabelle eingefügt werden.
    private Map<Aufgabe, BewerteteAufgabe> bewertung = new HashMap<>();

    /**
     * Konstruktor
     *
     * @param abgabe    Zu bewertende Abgabe
     * @param studenten Student, zu welchem Abgabe gehoert
     * @param kommentar Kommentar zur Abgabe
     */
    public BewerteteAbgabe(Abgabe abgabe, List<Student> studenten, String kommentar) {
        this.abgabe = abgabe;
        this.studenten = studenten;
        this.kommentar = kommentar;
    }

    public BewerteteAbgabe(Abgabe abgabe, List<Student> studenten) {
        this.abgabe = abgabe;
        this.studenten = studenten;
    }

    /**
     * gibt Tutoren zurueck, die Aufgabe korrigiert haben
     *
     * @return Tutoren, die korrigiert haben
     */
    public List<User> getTutoren() {
        return new ArrayList<>(this.tutoren);
    }

    /**
     * gibt Studenten zurueck, die Abgabe gemacht haben
     *
     * @return Studenten der Abgabe
     */
    public List<Student> getStudenten() {
        return new ArrayList<>(this.studenten);
    }

    /**
     * Fuegt die Bewertung zur Aufgabe hinzu.
     *
     * @param bewerteteAufgabe, die Bewertung
     * @throws NullPointerException     BewerteteAufgabe ist null
     * @throws IllegalArgumentException wenn die {@link Aufgabe} nicht in der {@link Abgabe} vorhanden ist.
     */
    public void addBewerteteAufgabe(BewerteteAufgabe bewerteteAufgabe) {

        Objects.requireNonNull(bewerteteAufgabe);

        if (!abgabe.containsAufgabe(bewerteteAufgabe.getAufgabe()))
            throw new IllegalArgumentException(MessageFormat.format("Die ubergebene Aufgabe {0} ist nicht in der Abgabe {1} enthalten.", abgabe.getAufgaben(), abgabe));

        bewertung.put(bewerteteAufgabe.getAufgabe(), bewerteteAufgabe);
    }

    /**
     * entfernt Bewertung einer Aufgabe
     *
     * @param bewerteteAufgabe bewerteteAufgabe, die entfernt werden soll
     * @return Erfolg
     * @throws NullPointerException     BewerteteAufgabe ist null
     * @throws IllegalArgumentException Aufgabe ist nicht in Bewertung
     */

    public boolean removeBewerteteAufgabe(BewerteteAufgabe bewerteteAufgabe) {
        if (bewerteteAufgabe == null) {
            throw new NullPointerException("bewerteteAufgabe ist null");
        }
        if (!(bewertung.containsKey(bewerteteAufgabe.getAufgabe()))) {
            throw new IllegalArgumentException("Aufgabe ist nicht in Bewertung");
        }
        return this.bewertung.remove(bewerteteAufgabe.getAufgabe(), bewerteteAufgabe);
    }

    /**
     * @param aufgabe Aufgabe, auf dessen Bewertung wir zugreifen wollen
     * @return Bewertung der Aufgabe
     * @throws NullPointerException     Aufgabe ist null
     * @throws IllegalArgumentException Aufgabe ist nicht in Abgabe
     */
    public BewerteteAufgabe getBewerteteAufgabe(Aufgabe aufgabe) {

        Objects.requireNonNull(aufgabe);

        if (!abgabe.containsAufgabe(aufgabe))
            throw new IllegalArgumentException(MessageFormat.format("Die ubergebene Aufgabe {0} ist nicht in der Abgabe {1} enthalten.", aufgabe, abgabe));

        return bewertung.get(aufgabe);
    }

    /**
     * berechnet Gesamtnote der Abgabe
     *
     * @return Gesamtnote
     */
    public ZwischenBewertung erstelleZwischenBewertung() {

        ErreichtePunkteAufgabenConsumer erreichtePunkteAufgabenConsumer = new ErreichtePunkteAufgabenConsumer(this);

        for (Aufgabe hauptAufgabe : abgabe.getAufgaben())
            hauptAufgabe.walkRecursiv(erreichtePunkteAufgabenConsumer);

        return new ZwischenBewertung(abgabe, erreichtePunkteAufgabenConsumer.summePunkte);
    }

    /**
     * Consumer, der ausrechnet wie viele Punkte gewichtet in einer Aufgabe erreicht wurden
     */
    private static class ErreichtePunkteAufgabenConsumer implements Consumer<Aufgabe> {

        /**
         * Gewichtete erreichte Punkte
         */
        public float summePunkte;

        /**
         * bewertete Abgabe fuer die Punkte summiert werden
         */
        private final BewerteteAbgabe bewerteteAbgabe;

        /**
         * Konstruktor
         *
         * @param bewerteteAbgabe beweretete Abgabe
         */
        public ErreichtePunkteAufgabenConsumer(BewerteteAbgabe bewerteteAbgabe) {
            this.bewerteteAbgabe = bewerteteAbgabe;
        }

        /**
         * Summiert die gewichteten Punkte fuer bewertete Aufgaben
         *
         * @param aufgabe Aufgabe, dessen erreichte Punkte summiert werden
         */
        @Override
        public void accept(Aufgabe aufgabe) {

            BewerteteAufgabe bewerteteAufgabe = bewerteteAbgabe.getBewerteteAufgabe(aufgabe);

            if (bewerteteAufgabe != null)
                summePunkte += bewerteteAufgabe.getErreichtePunkte() * aufgabe.getGewichtKumuliert();
        }
    }

}
@Singleton
public class BewerteteAbgabeDAOImpl implements BewerteteAbgabeDAO {
    @Override
    public void insert(BewerteteAbgabe bewerteteAbgabe) throws NullPointerException {
        HibernateUtil.execute(s -> s.save(bewerteteAbgabe));
    }

    @Override
    public void update(BewerteteAbgabe bewerteteAbgabe) throws NullPointerException {
        HibernateUtil.execute(s -> s.update(bewerteteAbgabe));
    }

    @Override
    public void delete(BewerteteAbgabe bewerteteAbgabe) {
        HibernateUtil.execute(s -> s.delete(bewerteteAbgabe));
    }

    @Override
    public List<BewerteteAbgabe> alleBewerteteAbgaben() {
        return HibernateUtil.find(s -> s.createQuery("from BewerteteAbgabe ", BewerteteAbgabe.class).list());
    }

    @Override
    public Optional<BewerteteAbgabe> findById(int id) {
        return HibernateUtil.find(s -> Optional.ofNullable(s.get(BewerteteAbgabe.class, id)));
    }
}
CREATE TABLE `BewerteteAbgabe` (
                                   `id` INT NOT NULL AUTO_INCREMENT,
                                   `abgabe` INT NOT NULL,
                                   `kommentar` varchar(255),
                                   PRIMARY KEY (`id`)
);
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "BEWERTETEABGABE_STUDENT" not found; SQL statement:
insert into BEWERTETEABGABE_STUDENT (BewerteteAbgabe_ID, studenten_EMAIL) values (?, ?) [42102-200]