【发布时间】:2017-03-07 18:54:56
【问题描述】:
我正在使用 JPA 在 IntelliJ 中开发简单的网络应用程序。我有一个包含 3 个表和这些记录的数据库:
Entity1 Entity1_Entity2 Entity2
ID: Ref1: Ref2: ID:
1 1 2 1
2 1 1 2
在 Entity1_Entity2 表中也指定了这些关系:
(Ref1) -> Entity1(ID)
(Ref2) -> Entity2(ID)
我使用 JPA 创建了实体 Entity1 和 Entity2:
@Entity
@Table(name = "Entity1")
@Getter
@Setter
public class Entity1 implements Serializable {
@Id
@Column(name = "ID")
private int id;
@ManyToMany
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1") },
inverseJoinColumns = { @JoinColumn(name = "Ref2") })
private List<Entity2> list = new ArrayList<>();
}
@Entity
@Table(name = "Entity2")
@Getter
@Setter
public class Entity2 implements Serializable {
@Id
@Column(name = "ID")
private int id;
@ManyToMany(mappedBy = "list")
private List<Entity1> otherList = new ArrayList<>();
}
我的问题是当我选择Entity1的一个实例(例如ID=1)并调用entity1.getList()时,它总是返回空引用,但根据数据-应该返回Entity2的2个对象。
尝试将@JoinTable 注释更改为这些值,但没有帮助:
@ManyToMany
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1", referencedColumnName = "ID") },
inverseJoinColumns = { @JoinColumn(name = "Ref2", referencedColumnName = "ID") })
@ManyToMany
@JoinTable(name = "Entity1_Entity2")
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1") },
inverseJoinColumns = { @JoinColumn(name = "Ref2") })
【问题讨论】:
-
你在事务中调用 getList() 吗?列出或列出对象是空参考吗?尝试不使用 ArrayList 初始化字段
-
不,没有交易。它将 null 返回给列表,因为它不会初始化任何列表。也试过不初始化列表,但是没有用。
-
您在实体上没有 id。没有定义主键。在 db 中找不到该实体。
-
对不起,我从我的代码复制时忘记包含它们。更新的问题。此外,我已将 ID 定义为两个表的主键。
-
您可以尝试将 [at]GeneratedValue(strategy = GenerationType.AUTO) 与 [at]Id 一起使用吗?
标签: java jpa intellij-idea many-to-many