Я хочу удалить связанные данные из трех таблиц одним запросом.Я получаю сообщение об ошибке: javax.persistence.TransactionRequiredException: выполнение запроса на обновление / удаление
Мы используем Java 8, Hibernate ORM 5.4.0 и MySQL.Конечно, я уже посмотрел здесь, но не смог найти подходящий ответ на мою проблему.@Transactional не может помочь мне в качестве обозначения имени класса или метода.
Вот так выглядит мой метод удаления:
public void delteAllAccountsAndValues(Long accountIdToDelete) {
try {
startOperation(false);
getSession().createQuery("DELETE FROM AccountEntity WHERE accountId = :accountIdToDelete")
.setParameter("accountIdToDelete", accountIdToDelete)
.executeUpdate();
List accountLineIdsToDelete =
getSession()
.createQuery("SELECT ale.accountlineId FROM AccountlineEntity ale WHERE ale.accountId IN :accountIdToDelete")
.setParameter("accountIdToDelete", accountIdToDelete)
.list();
getSession().createQuery("DELETE FROM AccountlineEntity WHERE accountlineId = :accountLineIdsToDelete")
.setParameter("accountLineIdsToDelete", accountLineIdsToDelete)
.executeUpdate();
List accountLineValuesIdsToDelete =
getSession().createQuery("SELECT alve.accountlinevaluesId FROM AccountlinevaluesEntity alve WHERE" +
" alve.accountlineId IN :accountLineIdsToDelete")
.setParameter("accountLineIdsToDelete", accountLineIdsToDelete)
.list();
getSession().createQuery("DELETE FROM AccountlinevaluesEntity WHERE accountlinevaluesId = : accountLineValuesIdsToDelete")
.setParameter("accountLineValuesIdsToDelete", accountLineValuesIdsToDelete)
.executeUpdate();
} catch (HibernateException e) {
handleException(e);
} finally {
getSession().close();
}
}
Частьмой класс BaseManager:
void startOperation(boolean openTransaction) throws HibernateException {
this.session = HibernateUtil.getSessionFactory().openSession();
if (openTransaction) {
this.tx = session.beginTransaction();
}
}
void handleException(HibernateException e) {
System.out.println(e.getMessage());
if (e.getCause() != null) {
System.out.println(e.getCause().getMessage());
}
if (this.tx != null) {
this.tx.rollback();
}
}
protected Session getSession() {
return session;
}
protected void setSession(Session session) {
this.session = session;
}
protected Transaction getTx() {
return tx;
}
protected void setTx(Transaction tx) {
this.tx = tx;
}
public UserEntity getCurrentUser() {
return currentUser;
}
public void setCurrentUser(UserEntity currentUser) {
this.currentUser = currentUser;
}
Все сущности одинаковы с конструкцией, например, один из моих объектов:
@Entity
@Table(name = "account")
public class AccountEntity {
@Expose() private Long accountId;
private String sourcedata;
private Timestamp dateCreated;
private Integer parentId;
@Expose() private MandantEntity mandantEntity;
@Expose() private UserEntity userEntity;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "account_id", nullable = false)
public Long getAccountId() {
return accountId;
}
public void setAccountId(Long accountNewId) {
this.accountId = accountNewId;
}
@Basic
@Column(name = "sourcedata", nullable = false)
public String getSourcedata() {
return sourcedata;
}
public void setSourcedata(String sourcedata) {
this.sourcedata = sourcedata;
}
@Basic
@CreationTimestamp
@Column(name = "date_created")
public Timestamp getDateCreated() {
return dateCreated;
}
public void setDateCreated(Timestamp dateCreated) {
this.dateCreated = dateCreated;
}
@Basic
@Column(name = "parent_id")
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
...
Я могуне продвигаться дальше в этой точке прямо сейчас.Кто-нибудь знает, где именно может быть проблема?