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

注释异常:通过引用映射未知的目标实体属性

法弘壮
2023-03-14

我不熟悉Hibernate和JPA,正在尝试连接一个电影、评分员和评分的数据库。我一直收到由org.hibernate引起的错误。注释异常:通过引用映射未知目标实体属性:com.stephenalexander.projects.movierecommender.rating.rating。com.stephenalexander.projects.movierecommender.movie.movie.rations中的电影。每个电影对象和每个评级对象都与评级有一个单一的关系。我是这样写的:

评级:

package com.stephenalexander.projects.movierecommender.rating;

import com.stephenalexander.projects.movierecommender.movie.Movie;
import com.stephenalexander.projects.movierecommender.rater.Rater;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Objects;


@Entity
@Table(name="rating")
public class Rating {
    @Column(name = "rating_id")
    private Long ratingId;
    @Column(name = "rating")
    private Double ratingValue;
    private LocalDateTime time;

    @ManyToOne
    @JoinColumn(name = "rater_id", nullable = false)
    private Rater rater;

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

电影:

package com.stephenalexander.projects.movierecommender.movie;

import com.stephenalexander.projects.movierecommender.rating.Rating;

import javax.persistence.*;
import java.util.List;

@Entity
@Table(name = "movie")
public class Movie {
    @Id
    @GeneratedValue(
            strategy = GenerationType.AUTO
    )

    @Column(name = "movie_id")
    private Integer movieId;
    private String title;
    private int year;
    @Column(name = "posterurl")
    private String posterUrl;
    @Column(name = "runningtime")
    private int runningTime;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "movie")
    List<Rating> ratings;

评分者:

package com.stephenalexander.projects.movierecommender.rater;

import com.stephenalexander.projects.movierecommender.rating.Rating;

import javax.persistence.*;
import java.util.List;
import java.util.Objects;

@Entity
@Table(name = "rater")
public class Rater {
    @Id
    @GeneratedValue(
            strategy = GenerationType.AUTO
    )
    @Column(name = "rater_id")
    private Long raterId;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "rater")
    private List<Rating> ratings;

我查看了许多其他帖子,这个错误似乎最常见的原因是mappedBy注释引用了owner类中实例变量的名称以外的其他内容。我相信我做得对,因为Rating类有一个名为rater的变量和一个名为movie的变量。我不确定还有什么可能导致这个错误。非常感谢您的阅读!

编辑:在这里添加我对答案的评论,以澄清我认为这些注释是如何工作的:

据我所知,List

编辑2:我的另一个想法可能是误解......如果我已经在psql数据库中设置了关系,这些符号是不是不必要的?这是多余的吗?我认为这些符号的目的是让我更轻松地在java中导航查询。在我不断尝试编写查询并遇到错误导致我相信我的代码不知道这些表是相关的之后,我被引导到这些定义关系的符号。以下是它们在PostgreSQL中的设置方式:

-----------+-----------------------------+-----------+----------+-------------------------------------------
 rating_id | integer                     |           | not null | nextval('rating_rating_id_seq'::regclass)
 rater_id  | integer                     |           | not null |
 movie_id  | integer                     |           | not null |
 rating    | smallint                    |           |          |
 time      | timestamp without time zone |           |          |
Indexes:
    "rating_pkey" PRIMARY KEY, btree (rating_id)
Foreign-key constraints:
    "rating_movie_id_fkey" FOREIGN KEY (movie_id) REFERENCES movie(movie_id) ON UPDATE CASCADE
    "rating_rater_id_fkey" FOREIGN KEY (rater_id) REFERENCES rater(rater_id) ON UPDATE CASCADE
                Table "public.rater"
  Column  |  Type   | Collation | Nullable | Default
----------+---------+-----------+----------+---------
 rater_id | integer |           | not null |
Indexes:
    "rater_pkey" PRIMARY KEY, btree (rater_id)
Referenced by:
    TABLE "rating" CONSTRAINT "rating_rater_id_fkey" FOREIGN KEY (rater_id) REFERENCES rater(rater_id) ON UPDATE CASCADE
                         Table "public.movie"
   Column    |          Type          | Collation | Nullable | Default
-------------+------------------------+-----------+----------+---------
 movie_id    | integer                |           | not null |
 title       | character varying(100) |           | not null |
 year        | smallint               |           | not null |
 runningtime | smallint               |           | not null |
 posterurl   | character varying(350) |           |          |
Indexes:
    "movie_pkey" PRIMARY KEY, btree (movie_id)
Referenced by:
    TABLE "movies_genres" CONSTRAINT "fk_movie" FOREIGN KEY (movie_id) REFERENCES movie(movie_id)
    TABLE "movies_directors" CONSTRAINT "fk_movie" FOREIGN KEY (movie_id) REFERENCES movie(movie_id)
    TABLE "movies_countries" CONSTRAINT "fk_movie" FOREIGN KEY (movie_id) REFERENCES movie(movie_id)
    TABLE "rating" CONSTRAINT "rating_movie_id_fkey" FOREIGN KEY (movie_id) REFERENCES movie(movie_id) ON UPDATE CASCADE

共有2个答案

姜智渊
2023-03-14

缺少的是Target etEntity=Rating.class参数到@OneTo很多。所以不同类中的函数注释如下:

电影

@OneToMany(fetch = FetchType.LAZY, targetEntity = Rating.class, mappedBy = "movie")
private List<Rating> ratings

评分员

@OneToMany(fetch = FetchType.LAZY, targetEntity = Rating.class, mappedBy = "rater")
private List<Rating> ratings

评级

@ManyToOne
@JoinColumn(name = "rater_id", nullable = false)
private Rater rater;

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

感谢所有看过这个的人!

卢阳泽
2023-03-14
@Column(name = "movie_id")
private Integer movieId;

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

你在评级和电影中有一个与movie_id相同的专栏。因此存在冲突。

更改其中一个。

 类似资料:
  • 我的模型由不同类型的预算组成。这些预算具有不同的属性。我想在这些不同类型的预算之间建立一种“一对一”的关系。假设我有一个BudgetLevel1,它有很多BudgetLevel2,它也有很多BucketLevel3。所有这些BudgetLevel扩展了类预算 我的预算课程 预算级别1类 预算级别2类 预算级别3 看起来类似 这是我得到的错误 org.springframework.beans.fa

  • 问题内容: 我在被注释的对象中建立一对多关系时遇到问题。 我有以下几点: 然后这个 和这个 我在这里做错了什么 问题答案: 该属性正在引用,而该属性是,因此出现错误消息。因此,请将您的映射更改为: 或者将实体属性更改为(这就是我要做的)。 mapledBy参考指示“在我有一个用于查找配置的集合的东西上查找名为’customer’的bean属性。”

  • 尽管已经讨论了这个错误,但我不知道如何解决我的问题。我读到这个问题可能会被映射,所以我尝试了不同的选择,但问题仍然存在 控制台: Model.java: Article.java

  • 我想映射类主题到主题表。 主题。JAVA 主题。哈佛商学院。xml 冬眠cfg。xml 我正在读取csv文件的内容,并希望使用以下代码将其插入数据库。 管理ata.java 我得到以下错误 线程“main”组织中出现异常。冬眠MappingException:未知实体:组织中的主题。冬眠impl。SessionFactoryImpl。getEntityPersister(SessionFactor

  • 您好,我是JPA Spring boot的新手,现在我正在尝试将两个表之间的连接转换为第三个表。所以我有一个医生和病人表,其中有它的属性,一个医生可以检查每个病人,一个病人可以看望每个医生。但是在一次检查中,不能有超过一个病人和一个医生。对于医生,我想保留他们检查过的患者的信息,分别是患者的信息,以及他们检查过的医生的信息。我想创建一个名为DoctorVisit的中间表,其中我有做检查的医生的id

  • 我试图通过从域对象创建表来测试一对多映射,但我看到错误mappedBy引用未知的目标实体属性。谁能看一下吗? 谢谢 hibernate.cfg.xml 错误StackTrace 谢谢你的回复。我做了您提到的更改,还做了一些其他更改,比如向main.java添加session.save(flightvenive)和insertable=false,updatable=false以及@JoinColu