Hallo,
ich bin schon ne ganze Weile am tüfteln, bekomms aber nicht hin...
Will ein System erstellen, eine Domäne erstellen...
das System soll nun dieser Domäne zugeordnet werden und wenn der Haken gesetzt ist, in dieser Domäne ein Referenzsystem sein... bekomme aber folgende Exceptionmessages:
java.sql.SQLIntegrityConstraintViolationException:
could not insert collection: [bebauung.domain.Domain.referenceSystems#5]
Column 'SYSTEM_ID' cannot accept a NULL value.
der Fehler kommt wenn die Session commited!
Hier der Code:
Hier die wichtigen Sachen der Domainklasse:
und die wichtigen klassen der Systemklasse:
... Nutze dazu noch Hibernate!
und wenn ich :
subDomain.getReferenceSystems().add(system);
rausnehme funktioniert es, jedoch wird dann eben die Liste nicht erweitert! :-/
ich bin schon ne ganze Weile am tüfteln, bekomms aber nicht hin...
Will ein System erstellen, eine Domäne erstellen...
das System soll nun dieser Domäne zugeordnet werden und wenn der Haken gesetzt ist, in dieser Domäne ein Referenzsystem sein... bekomme aber folgende Exceptionmessages:
java.sql.SQLIntegrityConstraintViolationException:
could not insert collection: [bebauung.domain.Domain.referenceSystems#5]
Column 'SYSTEM_ID' cannot accept a NULL value.
der Fehler kommt wenn die Session commited!
Hier der Code:
Java:
JButton btnOk = new JButton("Ok");
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Aufbau der Session
final Session session = DBConnection.getInstance().getCurrentSession();
session.beginTransaction();
// Alle System ID's auslesen wo der Name das Item aus der
// SystemComboBox ist.
final List<?> systemId = session.createQuery(
"select systems.id from Systems as systems where name = '"
+ systemComboBox.getSelectedItem() + "'").list();
// Lade Object an der Position 1 (0)
final Long idSystem = (Long) systemId.get(0);
final Systems system = (Systems) session.load(Systems.class, idSystem);
// Markierte Zeilen in Array schreiben
int[] selectedRows = tableFactory.getSelectedRows();
// Für jede Zeile ausführen
for (int selection : selectedRows) {
// Standort-ID auslesen und Object mit der Wert der
// momentanen Selektion aus der DB auslesen
final List<?> factoryId = session.createQuery(
"select factory.id from Factory as factory where name = '"
+ tableFactory.getValueAt(selection, 0) + "'").list();
final Long idFactory = (Long) factoryId.get(0);
final Factory factory = (Factory) session.load(Factory.class, idFactory);
// Dem System den momentanen Standort hinzufügen
system.addFactoryToSystem(factory);
// erneuter Schleifendurchlauf >>//
}
final List<?> subDomainId = session.createQuery(
"select domain.id from Domain as domain where name = '"
+ subDomainComboBox.getSelectedItem() + "'").list();
final Long idSubDomain = (Long) subDomainId.get(0);
final Domain subDomain = (Domain) session.load(Domain.class, idSubDomain);
// Referenzsystem setzen
if (chkRefSystem.isSelected()) {
system.setIsRef(true);
subDomain.getReferenceSystems().add(system);
}
subDomain.addSystemToDomain(system);
session.save(system);
session.save(subDomain);
session.getTransaction().commit();
setVisible(false);
}
});
Hier die wichtigen Sachen der Domainklasse:
Java:
package bebauung.domain;
@XmlRootElement
@Entity
public class Domain implements Serializable {
private String description;
private Long id;
private String name;
private Domain parent;
private List<Systems> referenceSystem = null;
private List<Domain> subDomain = null;
private List<Systems> systems = null;
public Domain() {
super();
}
public Domain(String name, String description) {
this();
this.name = name;
this.description = description;
}
@XmlElementRef
@ManyToMany
public List<Systems> getReferenceSystems() {
if (this.referenceSystem == null) {
this.referenceSystem = new LinkedList<Systems>();
}
return this.referenceSystem;
}
@ManyToMany
public List<Systems> getSystem() {
if (systems == null) {
systems = new ArrayList<Systems>();
}
return this.systems;
}
public void setReferenceSystems(final List<Systems> referenceSystem) {
this.referenceSystem = referenceSystem;
}
}
und die wichtigen klassen der Systemklasse:
Java:
@XmlRootElement
@Entity
public class Systems implements Serializable {
private String description;
private List<Domain> domain;
private List<Factory> factory = null;
private Long id;
private Boolean isRef = false;
private String name;
public Systems() {
super();
}
public Systems(String name, String description) {
this();
this.name = name;
this.description = description;
}
public Boolean getIsRef() {
return this.isRef;
}
public void setIsRef(final Boolean isRef) {
this.isRef = isRef;
}
}
... Nutze dazu noch Hibernate!
und wenn ich :
subDomain.getReferenceSystems().add(system);
rausnehme funktioniert es, jedoch wird dann eben die Liste nicht erweitert! :-/