openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Boblitz John <John.Bobl...@BERTSCHI.com>
Subject Order of SQL Statements
Date Mon, 11 Jun 2012 15:29:45 GMT
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
 


Mime
View raw message