ich diesen Fehler erhalten: „EntityManager muss Zugriff innerhalb einer Transaktion sein“, was für mich seltsam ist, weil meine Bohne Marke mit Anmerkung ist:EJB, Ausnahme während beharren: „EntityManager Zugriff innerhalb einer Transaktion sein muss“
@Stateless(name = "UserControllerSession")
ich habe EntityManager wie folgt injiziert:
@PersistenceContext(unitName = "app")
private EntityManager em;
und das ist meine Methode:
@Override
@PermitAll
public String updateBlockedAndDeactivationReasonForIds(String userPk, String iban, List<String> associatedIds) {
UserLocal user = em.find(UserLocal.class, Long.valueOf(userPk));
if (user == null) {
return ("User with id: " + userPk + " does not exist ! \n");
}
user.setBlocked(true);
user.setActive(false);
user.setDeactivationReason(DeactivationReason.DEACTIVATION_MULTIPLY_IBAN_REASON);
user.setDeactivationDate(new Date());
StringBuilder message = new StringBuilder();
message.append(" IBAN " + iban + " is linked to multiple accounts: ");
for (String id : associatedIds) {
message.append(id + " ");
}
ContactJournalEntryBean cjb = new ContactJournalEntryBean("USER", user.getLogin(), new Date(), "Internet",
message.toString());
em.persist(user);
em.persist(cjb);
return "SUCCESS operation for user with id: " + userPk;
}
Soweit ich den Standardwert für die EJB-Methode kenne, ist Transactioanl.REQUIRED also von defualt transaction erstellt werden. Eine andere Frage ist, kann ich 2 in einer Transaktion bestehen? Danke für jede Hilfe
Sie können so viele "bestehen" wie Sie möchten! –
Warum brauchen Sie 'em.persist (user);' für? Weil die Methode find() eine Instanz von 'UserLocal' zurückgibt und diese Instanz verwaltet wird. Änderungen werden beim Beenden der Methode gespeichert. – ujulu