0

だから私はMySQLの関係を理解し​​ようとしています、私はコードを書いていますが、データベースに何かを追加するかのように、他のテーブルの外部キーが毎回NULLを与えるように、動作していないようです。私が関係のために持っているコードは次のとおりです。

ユーザー クラス:

    @OneToMany(mappedBy="user")
private Collection<Movie> movies;

    public Collection<Movie> getMovies() {
    return movies;
}
public void setMovies(Collection<Movies> movies) {
    this.movies = movies;
}

映画クラス:

@ManyToOne
    private User user;

    public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}

新しい映画 (users テーブルに接続されていると思われる) を追加するたびに、外部キー (user_id) によって、movies テーブルに null が返されます。ここで達成しようとしていることを要約すると、ムービーをライブラリに追加するたびに、そのムービーを持っている人のユーザー ID をデータベースに表示する必要があります。

ありがとう。

編集:

実行しようとするたびに、このエラーメッセージが表示され続けます。

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: entity.Movie.user
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)
at persistence.PersistenceUtil.persist(PersistenceUtil.java:26)
at main.CustomerConfig.main(CustomerConfig.java:47)

Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: entity.Movie.user
    at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)

データを作成してデータベースに保存するコード:

System.out.println("Type the users's name please. ");
        String name = br.readLine();

        System.out.println("Type the movies name please. ");
        String mname = br.readLine();

        User user = new User(name);
        PersistenceUtil.persist(user);
        Movie movie = new Movie(mname);
        PersistenceUtil.persist(movie);
        System.out.println("User & movie names are created!");
4

1 に答える 1

0
Movie movie = new Movie(mname);
PersistenceUtil.persist(movie);

エラーが示すように、ユーザーはこのmovieオブジェクトに対して null です。ユーザーを設定するのを忘れています。これは、次のようになります。

Movie movie = new Movie(mname);
movie.setUser(user);
PersistenceUtil.persist(movie);
于 2013-11-04T05:32:05.960 に答える