Hello,
after correcting the issues arrising from the InverseManager, and adding
annotations to remove unlinked Entities (@ElementDependent) I get
an error due to duplicate key.
The goal is:
I have up to 5 Axles and the User can delete any one of them and the others should
move up (Axle 3 becomes Axle 2 ...) When I delete the first Axel, I get an exception.
I get all the axles back from the GUI and proceed to move them from the Data Object
to my Entity:
TreeSet<AxleDTO> axleDtos = new TreeSet<AxleDTO>(new Comparator<AxleDTO>()
{
@Override
public int compare(AxleDTO pO1, AxleDTO pO2) {
if (pO1.getAxleNumber() < pO2.getAxleNumber()) {
return -1;
} else if (pO1.getAxleNumber() == pO2.getAxleNumber()) {
return 0;
} else {
return 1;
}
}
});
axleDtos.addAll(pData.getAxles());
if (axleDtos != null && !axleDtos.isEmpty()) {
short i = 1;
Set<Axle> axles = new HashSet<Axle>();
AxleMgr axleMgr = new AxleMgr(mPm);
for (AxleDTO axleDto : axleDtos) {
Axle axle = new Axle();
axleMgr.toEntity(axleDto, axle);
if (!axle.isActive()) {
axle.setEquipmentId(null);
} else {
axle.setAxleNumber(i++);
axle.setEquipmentId(pEntity);
axles.add(axle);
}
}
pEntity.setAxles(axles);
}
@Entity
@Table(schema = "galaxy11", name = "Equipment")
public class Equipment extends BaseEntity {
@JsonManagedReference
@OneToMany(cascade = CascadeType.ALL, mappedBy = "equipmentId", fetch = FetchType.EAGER)
@ElementDependent
private Set<Axle> axles = new HashSet<Axle>();
@Entity
@Table(schema = "galaxy11", name = "Axle", uniqueConstraints=
@UniqueConstraint(name="uq_Axle_equipmentId_axleNumber", columnNames = { "equipmentId", "axleNumber"
})
)
public class Axle extends BaseEntity {
@Basic
@Column(columnDefinition = "int2")
private short axleNumber;
@JsonBackReference
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "equipmentId", columnDefinition = "int8", nullable = false)
private Equipment equipmentId;
It all seems to work as I expect, except for the order of the statements!
The trace shows that the delete of the Axle is done AFTER the updates:
UPDATE galaxy11.Equipment
SET modified = ?, versionid = ?, length = ?, height = ?, wheelbase = ?,
tareweight = ?, grossweight = ?
WHERE uniqueid = ? AND versionid = ?
[params=(Timestamp) 2012-06-11 13:47:18.21, (int) 33, (BigDecimal) 6.2, (BigDecimal) 3.1,
(BigDecimal) 3.8, (BigDecimal) 6.7, (BigDecimal) 18, (long) 413908, (int) 32]
- <t 656806424, conn 972792495> [27 ms] spent
- <t 656806424, conn 972792495> executing prepstmnt 684003742
UPDATE galaxy11.Axle
SET modified = ?, versionid = ?, equipmentid = ?, axlenumber = ?
WHERE uniqueid = ? AND versionid = ?
[params=(Timestamp) 2012-06-11 13:47:18.23, (int) 15, (long) 413908, (short) 2, (long) 413965,
(int) 14]
- <t 656806424, conn 972792495> [23 ms] spent
- <t 656806424, conn 972792495> executing prepstmnt 10578812
UPDATE galaxy11.Axle
SET modified = ?, versionid = ?, equipmentid = ?, axlenumber = ?
WHERE uniqueid = ? AND versionid = ?
[params=(Timestamp) 2012-06-11 13:47:18.24, (int) 2, (long) 413908, (short) 3, (long) 504805,
(int) 1]
- <t 656806424, conn 972792495> [21 ms] spent
- <t 656806424, conn 972792495> executing prepstmnt 1704434230
UPDATE galaxy11.Axle
SET modified = ?, versionid = ?, equipmentid = ?, axlenumber = ?
WHERE uniqueid = ? AND versionid = ?
[params=(Timestamp) 2012-06-11 13:47:18.24, (int) 13, (long) 413908, (short) 1, (long) 498801,
(int) 12]
- <t 656806424, conn 972792495> [22 ms] spent
- <t 656806424, conn 972792495> executing prepstmnt 1141736277
UPDATE galaxy11.Motor
SET modified = ?, versionid = ?
WHERE uniqueid = ? AND versionid = ?
[params=(Timestamp) 2012-06-11 13:47:18.24, (int) 28, (long) 414058, (int) 27]
- <t 656806424, conn 972792495> [21 ms] spent
- <t 656806424, conn 972792495> executing prepstmnt 1395221594
DELETE FROM galaxy11.Axle
WHERE uniqueid = ? AND versionid = ?
[params=(long) 413966, (int) 14]
I am certain I am missing something quite minor, but after running interactive debugs between
The GUI and the persistence for the last 48 hrs, I think I am missing the obvious.
Anyone out there see where I am going astray?
Thanks,
John
|