JPA @ Many-To-Many с дополнительным столбцом и удалением @OrderColumn не обновляет значение @OrderColumn - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть сущности

Атрибут

@Entity
@Table(name = "Attributes")
public class Attribute implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Version
    private Long version = 0L;

    private String name = "";

    @Getter @Setter
    @OneToMany(mappedBy = "attribute", orphanRemoval = true)
    private Set<AttributeGroup> groups = new HashSet<>(0);

    // getters - setters
    // hashcode - equals, based on id
}

Группа

@Entity
@Table(name = "Groups")
public class Group implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Version
    private Long version = 0L;

    private String name = "";

    @OneToMany(mappedBy = "group", orphanRemoval = true, cascade = {PERSIST, MERGE})
    @OrderColumn(name = "ordinal", nullable = false, columnDefinition = "INT DEFAULT 0")
    private List<AttributeGroup> attributes = new ArrayList<>(0);

    // getters - setters
    // hashcode - equals, based on id
}

AttributeGroup /AttributeGroupId

@Entity
@Table(name = "AttributesGroups")
public class AttributeGroup implements Serializable {

    @EmbeddedId
    private AttributeGroupId id;

    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("groupId")
    @JoinColumn(name = "groupId", foreignKey = @ForeignKey(name = "FK_ATTRIBUTES_ATTRIBUTES_GROUPS"))
    private Group group;

    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("attributeId")
    @JoinColumn(name = "attributeId", foreignKey = @ForeignKey(name = "FK_ATTRIBUTES_GROUPS_ATTRIBUTES"))
    private Attribute attribute;

    public AttributeGroup(final Group group, final Attribute attribute) {
        this.id = new AttributeGroupId(group.getId(), attribute.getId());
        this.group = group;
        this.attribute = attribute;
    }

    // getters - setters
    // hashcode - equals, based on id
}

@Embeddable
class AttributeGroupId implements Serializable {

    private Long groupId;

    private Long attributeId;

    public AttributeGroupId() { }

    private AttributeGroupId(final Long groupId, final Long attributeId) {
        this.groupId = groupId;
        this.attributeId = attributeId;
    }

    // getters - setters
    // hashcode - equals, based on groupId and attributeId
}

Добавление некоторых атрибутов в группу, которую я имею

+---------------------------------+
| groupId | attributeId | ordinal |
+---------------------------------+
|    4    |      1      |    0    |
|---------------------------------|
|    4    |      2      |    1    |
|---------------------------------|
|    4    |      3      |    2    |
+---------------------------------+

Когда я удаляю атрибут (2) из ​​списка attributes группы (4)и сохранить группу, все работает нормально, и у меня есть

+---------------------------------+
| groupId | attributeId | ordinal |
+---------------------------------+
|    4    |      1      |    0    |
|---------------------------------|
|    4    |      3      |    1    |
+---------------------------------+

Но когда я удаляю / удаляю атрибут (2) как есть, он удаляет его из связанной группы (4), но порядковый номер столбца не получаетобновлен, поэтому у меня есть

+---------------------------------+
| groupId | attributeId | ordinal |
+---------------------------------+
|    4    |      1      |    0    |
|---------------------------------|
|    4    |      3      |    2    |
+---------------------------------+

Что-то не так с моей картой?

Есть ли способ исправить это, не используя EntityListeners?

Я использую Hibernate 5.3.1.Final как поставщик JPA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...