繁体   English   中英

使用 JPA 时,如何允许 arrayList 中的重复项?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM