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

Hibernate:单一关系中的PSQLException

裘臻
2023-03-14

我有一个springboot应用程序,其中我有一个postgres数据库,里面有一个电影院列表:

cinemadb=# select * from cinemas;
 id |           name            
----+---------------------------
  1 | London''s Electric Cinema
  2 | Alamo Drafthouse
  3 | Cineteca Matadero
  4 | Cine-de Chef
  5 | Castro Theatre
  6 | Cine Thisio

这些影院中的每一个都显示一部或多部电影(在另一个数据库中)。我创建了一个关系表:

cinemadb=# select * from cinema_movie;
 cinema_id | movie_id 
-----------+----------
         1 |        1
         1 |        5
         1 |        8
         2 |        2
         3 |        3
         3 |        9
         4 |        1
         4 |        2
         4 |        8
         4 |        9
         6 |        9
         7 |        9
         7 |        1
         8 |        1

在最后一个表中,cinema_id是链接到cinemas表中id的外键。movie_id只是一个表示另一个数据库中的id的整数。

我的实体表示形式:

@Entity
@Table(name = "cinemas")
data class Cinema(
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        val id: Long = -1,
        val name: String = "",
        @OneToMany(mappedBy = "cinema", cascade = [CascadeType.ALL])
        @JsonIgnore
        val movies: Set<CinemaMovies> = HashSet()) {

    override fun toString(): String {
        return "Cinema[id=$id, name=$name]"
    }
}

@Entity
@Table(name = "cinema_movie")
data class CinemaMovies(
        @Id
        @ManyToOne
        @JoinColumn(name="cinema_id", nullable=false)
        val cinema: Cinema? = null,
        @Id
        @Column(name = "movie_id")
        val movieId: Long = -1): Serializable

当我试着去看属于个人影院的电影时,问题就来了:

null

我做错了什么?

共有1个答案

米裕
2023-03-14

这似乎是许多人的关系,而不是一个人的关系。同样,在单个实体类中,您不能用@id注释两个实例变量。您必须使用create ManyToMany Relationship。
参考示例:https://www.baeldung.com/hibernate-many-to-many

 类似资料:
  • 问题内容: 我有一对一的关系,但是hibernatetool在生成模式时抱怨。这是显示问题的示例: 人与OtherInfo具有一对一关系: 人是OtherInfo的拥有方。OtherInfo是拥有方,因此person用于在Person中指定属性名称“ otherInfo”。 使用hibernatetool生成数据库架构时出现以下错误: 知道为什么吗?我是在做错什么还是这是Hibernate错误?

  • 我在hibernate中搜索建立关系的各种可能性,遇到了下面的代码片段

  • 我有两个实体,它们之间有一对一的联系。这两个实体都具有复合自然主键。一个实体使用其自然组合键中的1个字段和一个额外列引用另一个实体。我在持久化这些实体方面有问题,Hibernate首先插入引用对象(根据我的理解,这是HallPlacesSchema),因此在插入引用对象之前,我立即得到约束违反错误(Hall)。 在单个会话中,我完全按照该顺序坚持霍尔,然后是霍尔广场化学时,问题就出现了。 当会话刷

  • 孩子:@EDIT感谢@MithatKonuk 和家人:@EDIT感谢@米塔科努克 我想得到作为家庭一部分的孩子的名单。我尝试进行查询:@编辑感谢@MithatKonuk 当我尝试运行它时,总是会出现错误: 我需要你的帮助。 @编辑好的,所以我将此代码更新为完整的实体。你还需要更多吗?我很抱歉,也许这很容易,但是我正在学习Hibernate,我不知道这个cos出了什么问题。谢谢你的回答。

  • 我有两个类:< code>User和< code>UserProfile。 用户类别: 用户配置文件类: 当我使用此代码时,我在具有多对多关系的表用户配置文件中获得重复的实体。我使用 函数来保存对象。我做错了什么? 然后我删除 cascadeType,出现错误:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 Hibernate日志:

  • 我想在(您可以将其视为Student)实体和实体之间实现一个@ManyTomany单向的。很简单,一个教室可以有很多学生,而学生可以有很多教室。我希望它是单向的,因为我希望班级只知道它包含什么学生,学生不必知道他们有什么班级。这就是我目前所拥有的: ClassRoom.java Account.java 我通过以下代码保存它(使用Spring JPA): 但我得到了以下错误: 下面是StackTr