Derby/JavaDB Exception - Cannot accept Null Value (help)

fl_ex

Bekanntes Mitglied
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:
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! :-/
 

diel2001

Bekanntes Mitglied
Ist meiner Meinung nach ganz eindeutig und zwar versuchst du in einer Not Nullable Spalte ein Null wert einzufügen
Der Wert der SYSTEM_ID ist wahrscheinlich null
 
S

SlaterB

Gast
tja, nur wird nicht einfach direkt ein Objekt einer einzelnen Klasse neu angelegt und gespeichert, sondern ein vorhandenes System einer SubDomain zugeordnet,
da ist nicht gut zu überblicken, was intern an Spalten geändert wird,

> @ManyToMany
> public List<Systems> getReferenceSystems()

ist in der DB durch eine Zwischentabelle umgesetzt? die müsste ja vorhanden sein, dort testweise NULL-Werte erlauben,
was genau wird in der DB erzeugt wenn ein System in die Liste eingefügt wird?
 

fl_ex

Bekanntes Mitglied
Ja, es werden Kreuztabellen erzeugt...

"DOMAIN_SYSTEMS"

und da werden die Spalten Domain_ID, System_ID, referenceSystem_ID hinzugefügt...
und wenn ich das mit den subDomain.getRefernceSystem.add(system) weglassen wird bei referenceSystem_ID = <NULL> reingeschrieben
 
Zuletzt bearbeitet:
S

SlaterB

Gast
hast du diese Tabelle erstellt oder ging das automatisch?
woher weiß Hibernate, dass es diese Tabelle verwenden soll, steht das in irgendeiner Konfiguration vor der du weißt?
sonst wird sie wohl nach den Namen automatisch gewählt

3 Spalten hat diese Tabelle, das ist ungewöhnlich, um die bei beiden Tabellen zu verbinden braucht es nur zwei,
soll die Dritte auch eine System-Id sein oder eine Id für Einträge genau dieser Referenz-Tabelle?

anscheinend wird mindestens eine Spalte davon bisher nicht automatisch gefüllt, der Fehlermeldung nach eher die zweite als die dritte,
erlaube wie gesagt provisorisch NULL-Werte oder lösche die überflüssige Spalte

wie man das generall richtig konfigurieren kann, kann ich nicht sagen,
schaue vielleicht im Internet nach Many-to-Many-Beispielen oder wer anders erklärt es hier noch

----

funktioniert
> @ManyToMany
> public List<Systems> getSystem() {
?
gibts dort auch eine Zwischentabelle, wieviele Spalten, klappt Einfügen?
 

fl_ex

Bekanntes Mitglied
Zwischentabelle: DOMAIN_SYSTEMS

DOMAIN_ID - SYSTEMS_ID
x x
x x
x x

bei der ReferenceSystemList kommt das dazu:

DOMAIN_ID - SYSTEMS_ID - ReferenceSystem_ID
x x x(<null>)
x x x(<null>)
x x x(<null>)
 
S

SlaterB

Gast
was ist ReferenceSystemList im Gegensatz zur Zwischentabelle DOMAIN_SYSTEMS?
ist ReferenceSystemList eine DB-Tabelle, eine Java-Klasse, ..?
 

fl_ex

Bekanntes Mitglied
lass List weg^^

private List<Systems> referenceSystem


das ist eine Liste von Systemen die jede Domäne hat.
d.h Jede Domäne kann mehrerer Referenzsysteme haben
 
S

SlaterB

Gast
da sind wir wieder wie vor 12.00,
es gibt in Java die Many-To-Many-Verknüpfung und in der DB eine Zwischentabelle dazu, die doch DOMAIN_SYSTEMS heißt?
bisher hattest du gesagt dass es dort drei Spalten gibt,

wie ist nun dein Posting von 12:21 zu verstehen, was willst du damit überhaupt sagen?

jedenfalls liest es sich so, als wenn DOMAIN_SYSTEMS jetzt nur noch 2 Attribute hat?!

und dass es dann noch irgendwas anderes, 'ReferenceSystemList', gibt, mit 3 Attributen/ Spalten,
aber die Java-Liste kann damit kaum näher charakterisiert werden, die enthält doch nur Systems-Objekte, hat nichts Attributen/ Spalten zu tun?!
 

fl_ex

Bekanntes Mitglied
ok.. Alsooo..

Ich erstelle ein Prozess, einen Unterprozess....
zum Unterprozess wird eine Domäne zugeordnet...
dieser Domäne können mehrere Unterdomänen zugeordnet werden...

Wenn ich nun ein System(was erstellt wurde) einer Subdomäne zuordnen möchte und eine Haken bei "Ist Referenzsystem" mache soll er die List<ReferenceSystem> um das System erweitern...
er legt mir an:

SYSTEMS
DOMAIN
PROCESS
DOMAIN_SYSTEMS
(...)


in der DOMAIN_SYSTEMS sind 3 Spalten (Domain_ID, Systems_ID, ReferenceSystem_ID)
weil er muss ja wissen wenn man einer Domäne ein System zuordnet zu welcher ReferenceSystemListe es gehört...(Jeder Domain hat ja eine eigene Liste)

(-----> Ohne die Methode zum adden in die ReferenceSystemList füllt er nur Domain_ID und Systems_ID und setzt bei ReferenceSystem_id <null> ein!

--> Exception
 
Zuletzt bearbeitet:
S

SlaterB

Gast
also ignoriere ich Posting 12.21 komplett

------

zwei Spalten reichen an sich absolut zur Zuordnung, jeder Domäne X sind genau die die Einträge zugeordnet, die bei DOMAIN_ID eben genau die Id von X stehen haben,

aber ich verstehe langsam, dass du auch die zweite Many-to-Many-Verknüpfung
Java:
    @XmlElementRef
    @ManyToMany
    public List<Systems> getReferenceSystems() {
[..] 
    @ManyToMany
    public List<Systems> getSystem() {
in derselben DB-Tabelle unterbringst? eine Tabelle, die Domainen Systemen zuordnet, dabei je nach dritten Attribut in eine der zwei unterschiedlichen Listen im Java-Objekt, korrekt?
meine Güte, das hättest du wirklich deutlicher erklären können, allein dass es zwei Listen im Java-Objekt gibt habe ich zwar selbst schon erwähnt, du aber noch mit keinem Wort ;) (jedenfalls keinem für mich verständlichen ;) )

-----

wie du es überhaupt schaffts, dass beide Verbindungen da rein kommen und schon ob sowas grundsätzlich möglich und sinnvoll ist, kann ich wiederum nicht genauer beurteilen,
auf jeden Fall klingt es danach dass das Attribut NULL sein können sollten (nicht NOT NULL), aber ob es damit dann funktioniert?..

lieber zwei Tabellen bzw. erstmal nur eine zum Laufen bringen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KOKASS Exception bei Datenbankconnect Datenbankprogrammierung 9
Kirby.exe SQL-Exception: Column not found Datenbankprogrammierung 6
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
G PostgreSQL Nach Monaten auf einmal ClassNotFound-Exception Datenbankprogrammierung 3
K JPA Projekt Exception Datenbankprogrammierung 7
C jpa, exception Predeployment of PersistenceUnit failed Datenbankprogrammierung 1
M CommunicationLinkError - NullPointer Exception Datenbankprogrammierung 11
T MongoDB: Morphia REST 505 Exception Tomcat Datenbankprogrammierung 2
M SQL-Exception trotz funktionierendem SELECT Datenbankprogrammierung 4
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
M SQL Exception Datenbankprogrammierung 6
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
D Hibernate SaveOrUpdate Exception Datenbankprogrammierung 2
E MySQL Hibernate mit JaxWS führt zu LazyInitialization Exception Datenbankprogrammierung 8
E PostgreSQL Exception too ...many clients already bei DB-Abfrage Datenbankprogrammierung 14
T java sql exception getDate() Datenbankprogrammierung 2
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
E Sql Exception Datenbankprogrammierung 14
M NestedTransaction- Exception in Hibernate Datenbankprogrammierung 15
F Derby/JavaDB SQL-Exception...Aber wieso!? :/ Datenbankprogrammierung 2
T Exception ResultSet Datenbankprogrammierung 7
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Null Pointer exception statement Datenbankprogrammierung 8
G JDBC Exception Datenbankprogrammierung 3
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
G Stored Procedure Exception Handling Datenbankprogrammierung 3
C SQL Exception auf Unique überprüfen Datenbankprogrammierung 5
B Hibernate+JPA Exception in persistence.xml Datenbankprogrammierung 5
L SQL Exception Problem Datenbankprogrammierung 7
M hilfe zur einer Exception Datenbankprogrammierung 2
J Nullpointer Exception bei Zugriff auf Datenbank Datenbankprogrammierung 13
A MySQL Anbindung - Exception Handling Datenbankprogrammierung 2
R SQL Exception: Cursor position not valid Datenbankprogrammierung 7
O Oracle 11g wirft bei 90 % der installation eine Exception ? Datenbankprogrammierung 5
R Warum kommt eine Exception bei instanceof ? Datenbankprogrammierung 4
B SQL Exception Datenbankprogrammierung 9
E Datenbankverbindung Java MySQL Exception Datenbankprogrammierung 10
N Class not found Exception Datenbankprogrammierung 2
A Exception in thread "AWT-EventQueue-0" java.lang.N Datenbankprogrammierung 4
M SQL Exception bei LIMIT Datenbankprogrammierung 11
megachucky Problem mit: SQL Exception Before start of result set Datenbankprogrammierung 2
W updateRow() schmeißt eine Exception, weil schreibgeschützt Datenbankprogrammierung 6
M Sql Anfrage wirft Exception Datenbankprogrammierung 5
6 Communications link failure due to underlying exception Datenbankprogrammierung 10
R SQL Exception "Weiterleiten der Egebnissmenge" Datenbankprogrammierung 15
märliprinz Exception in thread "main" java.lang.OutOfMemoryEr Datenbankprogrammierung 9
S Java SQL-Exception bei Zugriff auf MSAccess Datenbankprogrammierung 2
K Exception bei Verbindungsaufbau Oracle Datenbank Datenbankprogrammierung 13
L "desc tablename" liefert SQL Exception mit execute Datenbankprogrammierung 6
M SQL Exception Datenbankprogrammierung 3
M Problem mit dem ActionListener und SQL Exception Datenbankprogrammierung 6
D Exception bei ResultSet.moveToInsertRow Datenbankprogrammierung 6
EagleEye problem mit exception Datenbankprogrammierung 2
L UPDATE löst Exception aus Datenbankprogrammierung 6
V Exception beim Speichern von eingegebenen Daten in Tabelle Datenbankprogrammierung 2
G ich bekomm immer die exception grrrr Datenbankprogrammierung 3
D Unklare SQL Exception Datenbankprogrammierung 3
A Fehlermeldung: JOIN FETCH expressions cannot be defined with an identification variable Datenbankprogrammierung 0
F Sqlite cannot commit Datenbankprogrammierung 2
D Error 1452: Cannot add or update a child row: a foreign key constraint fails Datenbankprogrammierung 15
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
J method createQuery in interface javax.persistence.EntityManager cannot be applied to given types ... Datenbankprogrammierung 2
A The import javax.persistence cannot be resolved Datenbankprogrammierung 1

Ähnliche Java Themen


Oben