Hallo zusammen,
ich habe ein Problem bei der Persistierung einer MAP.
So bald ich ein neues Run-Objekt erstelle deren HashMap (config) gefüllt (mehrere Einträge) ist und das persistiere erhalte ich die unten stehende Fehlermeldung. Wen ich ein neues Run-Objekt persistiere deren HashMap keine Einträge hat erhalte ich keine Fehlermeldung.
Seltsamerweise funktioniert aber das Auslesen aus der DB. Ich habe in die config Tabelle manuell Einträge eingefügt. Ich erhalte dann beim Auslesen eines Run-Objektes aus der DB auch die Werte aus der config-Tabelle in meiner HashMap.
Beim Einlesen aus der DB funktioniert es also. Beim Persistieren neuer Objekte aber nicht. Warum?
ich habe ein Problem bei der Persistierung einer MAP.
So bald ich ein neues Run-Objekt erstelle deren HashMap (config) gefüllt (mehrere Einträge) ist und das persistiere erhalte ich die unten stehende Fehlermeldung. Wen ich ein neues Run-Objekt persistiere deren HashMap keine Einträge hat erhalte ich keine Fehlermeldung.
Seltsamerweise funktioniert aber das Auslesen aus der DB. Ich habe in die config Tabelle manuell Einträge eingefügt. Ich erhalte dann beim Auslesen eines Run-Objektes aus der DB auch die Werte aus der config-Tabelle in meiner HashMap.
Beim Einlesen aus der DB funktioniert es also. Beim Persistieren neuer Objekte aber nicht. Warum?
Code:
@Entity public class Run { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @ElementCollection @MapKeyColumn(name="key") @Column(name="value") @CollectionTable(name="Config", joinColumns=@JoinColumn(name="run")) private Map<String, String> config; public Run() { taskConfig = new HashMap<String, String>(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, String> getConfig() { return config; } public void setConfig(Map<String, String> config) { this.config = config; } }
Code:
Run run = em.find(Run.class, 3); System.out.println(run.getName()); System.out.println(run.getConfig().size()); // bis zu diesem Zeitpunkt funktoniert es Map<String, String> config = new HashMap<String, String>(); config.put("dbname", "codie"); run.setConfig(config); em.getTransaction().begin(); em.persist(run); em.getTransaction().commit();
Code:
Table RUN: id int PK name varchar(255) Table Config: id int PK run int FK (Null) // Null-Werte möglich key varchar(255) value varchar(255)
Error Code: 1064
Call: INSERT INTO config (run, value, key) VALUES (?, ?, ?)
bind => [3 parameters bound]
Query: DataModifyQuery(sql="INSERT INTO config (run, value, key) VALUES (?, ?, ?)")
Call: INSERT INTO config (run, value, key) VALUES (?, ?, ?)
bind => [3 parameters bound]
Query: DataModifyQuery(sql="INSERT INTO config (run, value, key) VALUES (?, ?, ?)")
Comment