Hibernate INSERT не отображается в базе данных «транзакция JDB C отмечена для отката только» - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над кодом базы данных для проекта, который использует DeltaSpike и Hibernate в Java SE.

Кажется, что все запросы SELECT работают, как задумано, однако оказалось, что запросов INSERT нет фактически появляются в базе данных, несмотря на то, что в консоли не регистрируются предупреждения, ошибки или исключения.

Я не отфильтровал журналы, которые содержат следующее сообщение:

[DEBUG] [05/05 00:52:16] [org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl] JDBC transaction marked for rollback-only

I ' мы пробовали добавить аннотацию @Transactional из javax.transaction и org.apache.deltaspike.jpa.api.transaction, а также изменить настройку autocommit в persistence.xml.

Как я могу заставить это прекратить попытки отката транзакции ?

настойчивость. xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
  <persistence-unit name="primary">
    <properties>
      <property name="hibernate.connection.autocommit" value="false"/>
      <property name="hibernate.hbm2ddl.auto" value="validate"/>
      <!-- Omitted for Brevity -->
    </properties>
  </persistence-unit>
</persistence>

EmoteRepository. java

@Repository(forEntity = EmoteData.class)
public interface EmoteRepository extends EntityRepository<EmoteData, Long> {

}

EmoteListener. java

@Singleton
public class EmoteListener extends ListenerAdapter {

    private final EmoteRepository emoteRepo;

    @Inject
    public EmoteListener(EmoteRepository emoteRepo) {
        this.emoteRepo = Objects.requireNonNull(emoteRepo);
    }

    @Override
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
            // Omitted for Brevity

            EmoteData emoteData = new EmoteData(emoteId, guildId);
            emoteRepo.save(emoteData);
        }
    }
}

1 Ответ

0 голосов
/ 05 мая 2020

Прошу прощения, я нашел решение моей проблемы, и этот вопрос не дает никакой информации, необходимой для ее решения.

Моя проблема не имела ничего общего с DeltaSpike.

Я просто неправильно использовал аннотации @Entity и @Table, выполнив:

@Entity(name = "table")
@Table
public MyTable {

}

Но сгенерированные запросы назывались MyTable, а не table. Решение заключалось в том, чтобы изменить его:

@Entity
@Table(name = "table")
public MyTable {

}

Нет журналов, касающихся этого, где зарегистрировано, во время отладки и пошагового выполнения кода Hibernate возникло исключение, которое показало, что ни один из моих классов Entity не был фактически сопоставлен, вот как это был обнаружен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...