gpt4 book ai didi

java - JPA 手动创建@JoinTable

转载 作者:行者123 更新时间:2023-12-04 05:58:00 24 4
gpt4 key购买 nike

嗨,我遇到了 JPA 速度慢的问题。使用 jps 映射队列模型、队列快照和事件。
这是我的实体:

@Entity
@Table(name = "cmEvent")
public class Event implements Serializable {
private static final long serialVersionUID = -3252213465022678048L;
@Id
@Column(name = "eventId")
private long eventId;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "cmEventSnap",
joinColumns = @JoinColumn(name = "eventId"),
inverseJoinColumns = @JoinColumn(name = "snapshotId"))
private List<Snapshot> snapshots = new ArrayList<Snapshot>();
// setters & getters
}

@Entity
@Table(name = "cmSnapshot")
public class Snapshot implements Serializable {
private static final long serialVersionUID = -3892306246413539227L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "snapshotId")
private long snapshotId;

@ManyToMany(mappedBy = "snapshots", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Event> events = new ArrayList<Event>();
// setters & getters
}

@Entity
@Table(name = "cmQueue")
public class Queue implements Serializable {
private static final long serialVersionUID = 2209454705341173802L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "queueId")
private long queueId;

@OneToMany(mappedBy = "queue", cascade = CascadeType.ALL)
private List<Snapshot> snapshots = new ArrayList<Snapshot>();
// setters & getters
}

所以我的问题是这样一个事实,即从 JPA 自动创建的事件实体的 JoinTable 变得非常大,而且随着时间的推移它变得越来越慢。

我想在列 eventsId 上为该表创建索引。

有没有办法通过使用注释来做到这一点?
如果没有,我如何手动创建一个新实体的joinable?

谢谢。

最佳答案

目前,您无法使用 Java 注释对此做任何事情。这是使用 JPA 的多对多的一个众所周知的陷阱,即 Hibernate .

Teneo (Eclipse EMF) 是一个可以为您做到这一点的实现(创建必要的索引)。

所以,现在,你被困在手动索引创建中,在你的 RDBMS 上发出 DDL 查询......

否则 here you will find an example (具有附加功能,但总体思路相同)如何手动创建连接表。

关于java - JPA 手动创建@JoinTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9276892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com