У меня есть сущности
Атрибут
@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