![](/img/trans.png)
[英]A way to not allow duplicates to be shown on a arraylist without using the Hashset method
[英]How to allow duplicates in an arrayList when using JPA?
我不断收到“java.lang.IllegalStateException:同一实体的多个表示”,即使我将 @Id 设置为 true 并且我在变量上使用了一对多关系。
以下是我试图相互关联的类:
@Entity
@Table(name = "map_area")
public class MapArea extends BasicModel {
@Id
@Column(nullable = false, unique = true)
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "area", referencedColumnName = "name")
public List<AlternativeAreaName> alternativeNames;
public MapArea() {}
public MapArea(String name) {
this.name = name;
this.alternativeNames = new ArrayList<>();
}
}
@Entity
@Table(name = "alternative_area_name")
public class AlternativeAreaName implements Serializable {
@Id
@Column(nullable = false, unique = false)
private String area;
@Column(nullable = true)
private String alternativeName;
public AlternativeAreaName(){}
public AlternativeAreaName(String area, String alternativeName) {
this.area = area;
this.alternativeName = alternativeName;
}
}
我想让 JPA 根据名称变量创建另一个与这个简单的表相关的表,但是每当我尝试添加到列表并保存到数据库时,我都会得到
java.lang.IllegalStateException:同一实体的多个表示
MapArea mapArea = new MapArea("example");
AlternativeAreaName altAreaName1 = new AlternativeAreaName("example", "alt example");
AlternativeAreaName altAreaName2 = new AlternativeAreaName("example", "alt example2");
mapArea.alternativeNames.add(altAreaName2);
mapAreaRepository.save(mapArea);
您已使用private String area
字段作为实体 AlternativeAreaName 的主键。 所以当你试图添加
AlternativeAreaName altAreaName1 = new AlternativeAreaName("example", "alt example");
AlternativeAreaName altAreaName2 = new AlternativeAreaName("example", "alt example2");
它们都具有相同的主键。 所以它抛出了上述异常。
要为 JPA 实体生成主键,请检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.