Hi Leute ich bin hier echt am Verzweifeln!!! Ich habe folgende EntitiyKlassen Struktur:
User.java
Contact.java
Wenn ich nun einen User mit Kontaktinformationen wie folge anlege:
CustomerController.java:
Bekomme ich folgende Fehlermeldung:
Die UserDaoImpl.java sieht wie folgt aus:
Der Anwender gibt in einem JSF-Formular alle Daten ein und dies klappt auch ( durch Variablenkontrolle beim Debuggen verifiziert), aber wenn ich dann alles in die DB packen will bekomme ich die obige Fehlermeldung. Ich habe auch schon probiert die Id der Contact Tabelle selber zu setzen mit
Jedoch hat ja der User erst eine Id, wenn der Datensatz in die Datenbank geschrieben wird. Daher gibt user.getId() bei obigen Konstruktion null zurück! Hat jmd. vllt mehr Erfahrung und hat eine Lösungsidee für mich?
Besten Dank
User.java
Java:
import org.springframework.security.core.userdetails.UserDetails;
@Entity
public class User implements UserDetails, Serializable {
...
@OneToOne( cascade = {CascadeType.ALL})
@PrimaryKeyJoinColumn
public Contact getContact() { return this.contact; }
...
}
Java:
@Entity
public class Contact implements Serializable {
...
@Id
@GeneratedValue
public Long getId() { return this.id; }
...
}
CustomerController.java:
Java:
@Controller(value="customerController")
public class CustomerController{
...
@Autowired
private UserDao userDao;
...
public void createCustomer(){
this.user = new User();
this.user.setContact(new Contact());
this.exists = false;
}
@Transactional
public void insertCustomer(){
...
try {
...
userDao.persist(user);
...
} catch (Exception e) {
this.exists = true;
messageController.addMessage("user_insert_exception",
FacesMessage.SEVERITY_ERROR);
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
}
...
}
}
SQL:
Cannot add or update a child row: a foreign key constraint fails (`develope`.`user`, CONSTRAINT ´FK36EBCB408F4488` FOREIGN KEY (`id`) REFERENCES `contact` (`id`))
Java:
public class UserDaoImpl implements UserDao {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
@Override
public void persist(User user) {
em.persist(user);
em.flush();
}
}
Java:
user = new User();
contact = new Contact(user.getId());
user.setContact(contact);
Besten Dank