# Hibernate: Ein Fluch



## Kababär (25. Aug 2017)

Hi,


nach unzähligen Änderungen an der Datenbank und meiner Entity-Klassen (Java) habe ich nun die Klassen mit NetBeans generieren lassen. Leider tritt immer noch ein Fehler auf:



> Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [FK_VIDEO_ID] in table [FRAME]
> at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:136)
> at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42)
> at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89)
> ...



Die von Netbeans generierten Klasse:

```
@Entity
@Table(name = "FRAME")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Frame.findAll", query = "SELECT f FROM Frame f")})
public class Frame implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "FID")
    private Integer fid;
    @Column(name = "FRAME_NUMBER")
    private Integer frameNumber;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkFrameId")
    private Collection<Rectangle> rectangleCollection;
    @JoinColumn(name = "FK_VIDEO_ID", referencedColumnName = "VID")
    @ManyToOne(optional = false)
    private Video fkVideoId;

//Constructor, getter & setter

}
```


```
@Entity
@Table(name = "VIDEO")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Video.findAll", query = "SELECT v FROM Video v")})
public class Video implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "VID")
    private Integer vid;
    @Column(name = "PATH")
    private String path;
    @Column(name = "FPS")
    private Integer fps;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkVideoId")
    private Collection<Frame> frameCollection;

// ....

}
```

Und so sieht die Tabelle Frame in h2 aus:



Ich verstehe die Fehlermeldung also nicht. Die Spalte existiert doch?
Die Idee ist, dass ein Video mehrere Frames hat, also eine 1 zu n Beziehung.
Dabei will ich aber gerne eine bidirektionale Verbindung, um schneller von einem Frame auf das dazugehörige Video zu kommen.

Kann mir jemand weiterhelfen?


----------



## T_T (25. Aug 2017)

Weiß nicht ob es was hilft aber hast du in der DB auch deine Column FK_VIDEO_ID als FK definiert?


----------



## Kababär (25. Aug 2017)

Ja, ist sie.
Hier mal eine Ausgabe von SCRIPT TO '...':


> CREATE CACHED TABLE PUBLIC.VIDEO(
> VID INT NOT NULL,
> PATH VARCHAR(255),
> FPS INT
> ...


----------



## Kababär (25. Aug 2017)

Ich habe folgendes weggelassen und nun geht es...


```
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Video.findAll", query = "SELECT v FROM Video v")})
```


----------

