Spring, Hibernate & JPA: Вызов сохраняется на entitymanager, кажется, не соглашается на базу данных

Я думаю, что регулярные выражения недостаточно мощны, чтобы делать то, что вы хотите здесь; вы хотите удалить все пробелы, найденные между символами скобок. Проблема в том, что решение этого для общего случая означает, что вы выполняете контекстно-зависимое соответствие строки, а регулярные выражения в основном нечувствительны к контексту и поэтому не могут выполнять вашу работу. Есть lookaheads и lookbehinds , которые могут ограничивать совпадения с конкретными контекстами, но они не будут решать вашу проблему в общем случае:

Содержащийся шаблон должен соответствовать только строки некоторой фиксированной длины, что означает, что abc или a|b разрешены, но a* и a{3,4} - нет. Ссылки группы не поддерживаются, даже если они соответствуют строкам некоторой фиксированной длины.

blockquote>

Из-за этого я сначала сопоставлял бы группы скобок:

>>> re.split(r'(\([^)]*\))', res)
['', '(321, 3)', '-', '(m-5, 5)', ' -', '(31,1)', '']

, а затем удалите пробелы из них на втором шаге перед тем, как join все вернется в одну строку:

>>> g = re.split(r'(\([^)]*\))', res)
>>> g[1::2] = [re.sub(r'\s*', '', x) for x in g[1::2]]
>>> ''.join(g)
'(321,3)-(m-5,5) -(31,1)'

17
задан Ruben Vermeersch 17 December 2008 в 15:26
поделиться

3 ответа

Благодаря eric и ответам Juan Manuel, я смог выяснить, что транзакция не фиксировалась.

Добавление @Transactional к storeAccount методу добилось цели!

18
ответ дан 30 November 2019 в 13:22
поделиться

Вы не должны явно называть сохранять метод. Операция слияния записала бы изменения в DB на фиксацию.

1
ответ дан 30 November 2019 в 13:22
поделиться

Вероятно, Вы сохраняете транзакцию активной, и она не называет "фиксацию" до другого выполнения методов, поддерживающего конец активной транзакции (все "голосование" за фиксацию и ни один для отката.)

, Если Вы уверены, что объект собираетесь сохраниться, в порядке, Вы могли, вероятно, сделать это:

@TransactionManagement(TransactionManagementType.BEAN)
public class AccountManager implements IAccountManager { ..}

и справляются с Вашим добавлением постоянства объекта:

@Resource
private SessionContext sessionContext;

public Account storeAccount(Account ac) {
    sessionContext.getUserTransaction().begin();
    ac = em.merge(ac);
    em.persist(ac);
    sessionContext.getUserTransaction().commit();
    return ac;
}
1
ответ дан 30 November 2019 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: