当前位置: 首页 > 知识库问答 >
问题:

Jpa@onetomany不能为逆边生成外键

欧阳楚
2023-03-14

Movie类有一个他的会话列表,我想同时保存存储在列表中的电影和他的会话。

这是我的代码

public class Movie {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "movie_id")
    private int movieId;

    ...

    @OneToMany(mappedBy = "movie",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Session> sessionList = new ArrayList<>();
}

public class Session {
 @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "session_id")
    private int sessionId;

    ...

    @ManyToOne
    @JoinColumn(name = "movie_id")
    private Movie movie;

}
public void testAddMovie(){
        Session session1 = new Session();
        session1.setDay("Monday");


        Movie movie = new Movie();
        movie.setTitle("hello");
        movie.getSessionList().add(session1);

        movieDao.addMovie(movie);
    }

   insert 
   into
           movies
            (actors, .... ,title) 
        values
            (?, ?, ?, ?, ..., ?, ?, ?, ?)

  insert 
  into
            sessions
            (day, movie_id, time) 
        values
            (?, ?, ?)

Hibernate不会引发异常,movie和session都成功地持久化了,但是表session中的外键'movie_id'始终显示为null。

那么问题出在哪里?当我只使用@onetomany而不使用@manytoone时,同样的测试工作正常,外键被成功添加。

共有1个答案

公孙霖
2023-03-14

在会话实体中,将de movie属性更改为:

@ManyToOne
@JoinColumn(name = "movie_id", foreignKey = @ForeignKey(name = "fk_session_movie."))
private Movie movie;
 类似资料:
  • 我有一个父表,它与一个子表有许多关联。 我试图用CriteriaBuilder编写一个查询,以限制从子表返回的结果。 我添加了一个谓词,类似于 如果父节点有一个子节点或子节点和子节点,则返回父节点,同时也返回所有子节点。 Hibernate使用我的谓词启动了第一个查询,但是第二个获取孩子的查询只使用了where子句中的JoinColumn,而没有包含它 思想? 我正在使用SetJoin 澄清:

  • 问题内容: 我正在尝试使用JPA建立双向关系。我了解这是应用程序负责维护双方关系的责任。 例如,一个图书馆有多本书。在图书馆实体中,我有: 图书实体为: 不幸的是,OneToMany端的集合为空。因此,例如,对setLibrary()的调用失败,因为this.library.getBooks()。contains(this)导致NullPointerException。 这是正常行为吗?我应该自己

  • 问题内容: 我有一个关于从子实体ir引用ParentEntities的问题,如果我有这样的事情: Parent.java: 和Child.java: 将创建以下表: 好的,到目前为止,一切都很好。但是,当涉及到使用Java的Reference时,我想,您可以做这样的事情。 这导致在数据库中: 但是事实并非如此,您必须明确地将“父级”设置为“子级”(我认为框架可能可以单独执行)。 因此,数据库中真正

  • 问题内容: 我对父实体和子实体之间的简单映射有疑问。一切正常,只有当我从集合中删除子记录时,才会删除它们。 父母: 孩子: 如果我现在从childs集合中删除and child,它不会从数据库中删除。我尝试取消引用,但这也不起作用。 实体在Web应用程序中使用,删除是Ajax请求的一部分。按下保存按钮时,我没有已删除子项的列表,因此我无法隐式删除它们。 问题答案: JPA的行为是正确的( 按照规范

  • 问题内容: 我将Spring和Hibernate用作JPA提供程序,并尝试获取@OneToMany(具有许多电话号码的联系人)以将外键保存在电话号码表中。从我的表单中,我得到一个Contact对象,其中有一个Phone(数字)列表。Contact可以正确持久保存(Hibernate从指定序列中获取PK)。电话(号码)列表也将保留正确的PK,但“联系人”表中没有FK。 希望我掌握了以上所有相关内容,

  • 嗨,我正在学习Spring JPA使用OneToMany和ManyToOne双向关系,在一些示例中,我看到OneToMany和ManyToOne关系,当我在两个方面编写时,JPA添加一个新列作为外键列,并插入父表中的键值。但当我尝试我的时候,这一栏总是空白的。下面是我的代码的样子: 下面是我的Account.java模型: 下面是我的dealer.java模型: 这里是我的控制器: 然后将JSON