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

Hibernate@OneToOne@JoinColumns注释加载速度

蓝泰平
2023-03-14

我试图使用Spring数据JPA注释在这两个实体之间创建关联。

这是我的第一个实体:演员

@Entity
@IdClass(SharedPrimaryKey.class)
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@Table(name = "ACTOR")
public class Actor implements Serializable {
    @Id
    @Column(name = "ACTOR_NAME")
    private String actorName;

    @Id
    @Column(name = "ACTOR_DOB")
    private String actorDob;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name="ACTOR_NAME"),
            @JoinColumn(name="ACTOR_DOB")
    })
    private Movie movie;
}

这是我的第二个实体:电影

@Entity
@IdClass(SharedPrimaryKey.class)
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@Table(name = "MOVIE")
public class Movie implements Serializable {
    @Id
    @Column(name = "ACTOR_NAME")
    private String actorName;

    @Id
    @Column(name = "ACTOR_DOB")
    private String actorDob;

    @Column(name = "MOVIE_TITLE")
    private String movieTitle;
}

我面临的问题是,当我试图根据演员名称检索所有电影时,@OneToOne和@JoinClons功能花费的时间太长。我以前将此设置为@OneTo许多,速度快得多,但由于两个表都使用复合主键,因此需要进行此更改。我可以使用哪些注释来加速此查询?

共有1个答案

那绪
2023-03-14

"我试图根据演员名称检索所有电影"它看不到与我的OneToOne关系。更多的是ManyTo许多一。忘记复合id-s。它们没有好处。Lombok@Data注释是许多注释的包装器。如果表名等于实体名称,则不需要@Table。

@Entity
@Data
public class Actor implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "ACTOR_ID")
  private String actorId;

  @Column(name = "ACTOR_NAME")
  private String actorName;

  @ManyToMany
  @JoinTable(
  name = "ACTOR_MOVIE", 
  joinColumns = @JoinColumn(name = "actorID", referencedColumnName = "actorID" ), 
  inverseJoinColumns = @JoinColumn(name = "movieID", referencedColumnName = "movieID"))
  private List<Movie> movies = new TArrayList<>();
}

@Entity
@Data
public class Movie implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "MOVIE_ID")
  private String movieID;

  @Column(name = "MOVIE_TITLE")
  private String movieTitle;

  @ManyToMany
  private List<Actor> actors = new TArrayList<>();
}
 类似资料:
  • 问题内容: 这就是我想要做的。 创建具有与孩子的OneToOne关系的父母 父母必须使用延迟加载来获取孩子 如果父母被删除,孩子也被删除 如果孩子被移走,父母不应该受到影响 级联更新和删除必须转换为DDL 班级家长 班级儿童 我的第1、3、4 点 完全正常工作,而 第5点则 部分正常工作,仍然需要解决如何翻译更新部分indo DDL。 第2点 是这里的大问题,对于我目前的解决方案,父级不会延迟加载

  • 我正在使用hibernate注释,为此,在中,我需要添加注释类,比如这里p是包名,Customer是注释bean。 假设我有20个此类注释类,这意味着我必须为该类编写20个映射行。在Spring中,有一个属性,可以用来注册/加载指定包中的所有hibernate注释类。 既然我没有使用Spring,那么我们可以在Hibernate中拥有相同的功能吗?

  • 问题内容: 它是有效申报,并在关系的双方,如: 我找不到任何表明这是无效的信息,但似乎在持久性过程中,至少必须违反关系的一侧。(例如,如果首先写入changeEntry,则changeEntryDetails临时为null)。 尝试此操作时,我看到抛出了异常。 我想避免在可能的情况下放宽约束,因为双方都 必须 存在。 问题答案: 声明并在关系的两边是否合法(…)我找不到任何表明无效的内容,但是在持

  • 问题内容: 在我从事的项目中,我不使用Spring,而仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4

  • 问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。

  • 问题内容: 我有2个类:User和UserPicture具有1:1的关系。 UserPicture中的“ user”将被加载,而UserPicture中的“ userPicture”则不会加载-我错了吗? 编辑 必须添加,我只是创建一个UserPicture并插入它们(使用现有的userId)-也许我需要在UserPicture中级联“ user”? 问题答案: 您必须映射您的课程。