Hallo zusammen,
ich habe zwei Tabellen (Entities): tbl_model (ModelEntity) und tbl_index (IndexEntity)
tbl_model: (pk = id)
tbl_index: (pk = id, fk = modelId)
Die FK-Beziehung habe ich in der Datenbank eingerichtet.
Das Auslesen der Daten funktioniert super, zum Model-Datensatz werden alle Index-Datensätze ausgelesen.
Leider funktioniert das Speichern nicht. Da bekomme ich folgende Fehlermeldung:
SQL Error: 1452, SQLState: 23000
Cannot add or update a child row: a foreign key constraint fails (`testdatengenerator`.`tbl_index`, CONSTRAINT `fk_index_model` FOREIGN KEY (`modelId`) REFERENCES `tbl_model` (`id`))
Kann mir da jemand auf die Sprünge helfen?
Vielen Dank, Gruß Jan
Meine ModelEntity
Meine IndexEntity
Meine persistence.xml
[XML]
<?xml version="1.0" encoding="ISO-8859-1"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="persistenceStudienprojekt"
transaction-type="RESOURCE_LOCAL" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!--
<class>de.studienprojekt.model.persistence.ModelEntity</class>
<class>de.studienprojekt.model.persistence.IndexEntity</class>
<class>de.studienprojekt.model.persistence.ParameterEntity</class>
-->
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://..." />
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.username"
value="..." />
<property name="hibernate.connection.password"
value="..." />
<property name="hibernate.hbm2ddl.auto"
value="update"/>
<property name="hibernate.show_sql"
value="true" />
<property name="hibernate.format_sql"
value="false" />
</properties>
</persistence-unit>
</persistence>
[/XML]
... und meine Manager-Klasse zum Verwalten der Daten:
ich habe zwei Tabellen (Entities): tbl_model (ModelEntity) und tbl_index (IndexEntity)
tbl_model: (pk = id)
tbl_index: (pk = id, fk = modelId)
Die FK-Beziehung habe ich in der Datenbank eingerichtet.
Das Auslesen der Daten funktioniert super, zum Model-Datensatz werden alle Index-Datensätze ausgelesen.
Leider funktioniert das Speichern nicht. Da bekomme ich folgende Fehlermeldung:
SQL Error: 1452, SQLState: 23000
Cannot add or update a child row: a foreign key constraint fails (`testdatengenerator`.`tbl_index`, CONSTRAINT `fk_index_model` FOREIGN KEY (`modelId`) REFERENCES `tbl_model` (`id`))
Kann mir da jemand auf die Sprünge helfen?
Vielen Dank, Gruß Jan
Meine ModelEntity
Code:
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
@Entity
@Table(name="tbl_model")
public class ModelEntity implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String description;
private List<IndexEntity> indexList;
public ModelEntity() {}
public ModelEntity(String name, String description) {
this.name = name;
this.description = description;
}
@Id @GeneratedValue
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getDescription() {return description;}
public void setDescription(String description) {this.description = description;}
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name="modelId")
public List<IndexEntity> getIndexList() {return indexList;}
public void setIndexList(List<IndexEntity> indexList) {this.indexList = indexList;}
}
Meine IndexEntity
Code:
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="tbl_index")
public class IndexEntity implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private int modelId;
private String name;
private String symbol;
private String runner;
private String description;
private int range;
public IndexEntity() {}
public IndexEntity(String name, String symbol, int range, String description, String runner) {
this.name = name;
this.symbol = symbol;
this.runner = runner;
this.range = range;
this.description = description;
}
@Id @GeneratedValue
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public int getModelId() {return modelId;}
public void setModelId(int modelId) {this.modelId = modelId;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getSymbol() {return symbol;}
public void setSymbol(String symbol) {this.symbol = symbol;}
public String getRunner() {return runner;}
public void setRunner(String runner) {this.runner = runner;}
@Column(name="indexRange")
public int getRange() {return range;}
public void setRange(int range) {this.range = range;}
public String getDescription() {return description;}
public void setDescription(String description) {this.description = description;}
}
Meine persistence.xml
[XML]
<?xml version="1.0" encoding="ISO-8859-1"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="persistenceStudienprojekt"
transaction-type="RESOURCE_LOCAL" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!--
<class>de.studienprojekt.model.persistence.ModelEntity</class>
<class>de.studienprojekt.model.persistence.IndexEntity</class>
<class>de.studienprojekt.model.persistence.ParameterEntity</class>
-->
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://..." />
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.username"
value="..." />
<property name="hibernate.connection.password"
value="..." />
<property name="hibernate.hbm2ddl.auto"
value="update"/>
<property name="hibernate.show_sql"
value="true" />
<property name="hibernate.format_sql"
value="false" />
</properties>
</persistence-unit>
</persistence>
[/XML]
... und meine Manager-Klasse zum Verwalten der Daten:
Java:
import javax.persistence.*;
public class ModelManager {
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceStudienprojekt");
private EntityManager manager = emf.createEntityManager();
private EntityTransaction tx = manager.getTransaction();
private static ModelDao modelManager;
private ModelManager(){}
public static ModelManagergetInstance(){
if (modelManager== null) {
modelDao = new ModelManager();
}
return modelManager;
}
public ModelEntity loadModel(int id) {
return manager.find(ModelEntity.class, id);
}
public void saveModel(ModelEntity model) {
tx.begin();
manager.persist(model);
tx.commit();
}
}