#java #mysql
#java #mysql
Вопрос:
- В файле persistence.xm l:
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.168.0.13:3306,192.168.0.14:3306/test?zeroDateTimeBehavior=convertToNullamp;amp;useUnicode=yesamp;amp;characterEncoding=UTF-8"/>
<property name="javax.persistence.jdbc.user" value="test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="test"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
</properties>
- Я получил исключение при длительном запуске:
`
Внутреннее исключение: java.sql.SQLException: соединение доступно только для чтения. Запросы, приводящие к изменению данных, не разрешены Код ошибки: 0 Вызов: ВСТАВИТЬ В ЗНАЧЕНИЯ vqmm_test (учетная запись, код, описание, is_free, lastupdate, program_code, received_at, send_sms, service_id, sms, sms_content, sms_detail, статус, created_at, id).) (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) bind => [привязка 15 параметров] Запрос: InsertObjectQuery(promote.entity.VqmmLuckyCode[ vqmmLuckyCodePK=promote.entity.VqmmLuckyCodePK[ id=0, createdAt= вт 23 апреля 14:30:55 ICT 2019 ] ]) в org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157) в promote.session.BaseSession.saveBulk(BaseSession.java: 209) в promote.session.BaseSession.saveBulk3(BaseSession.java:305) в promote.main.Продвигать.Досье (Promote.java:287) в promote.main.PromoteThread.run (PromoteThread.java:67) на java.lang.Thread.run(Thread.java:748) Вызвано: Исключением [EclipseLink-4002] (Eclipse Persistence Services — 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.Внутреннее исключение DatabaseException: java.sql.SQLException: соединение доступно только для чтения. Запросы, приводящие к изменению данных, не разрешены Код ошибки: 0 Вызов: ВСТАВИТЬ В ЗНАЧЕНИЯ vqmm_test (учетная запись, код, описание, is_free, lastupdate, program_code, received_at, send_sms, service_id, sms, sms_content, sms_detail, статус, created_at, id).) (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) bind => [привязка 15 параметров] Запрос: InsertObjectQuery(promote.entity.VqmmLuckyCode[ vqmmLuckyCodePK=promote.entity.VqmmLuckyCodePK[ id=0, createdAt= вт 23 апреля 14:30:55 ICT 2019 ] ]) в org.eclipse.persistence.exceptions.Исключение DatabaseException.SQLException(DatabaseException.java:331) в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:900) в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:962) в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:631) в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java: 558) в организации.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002) в org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:298) в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:377) в org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:165) в org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:180) в org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:489) в org.eclipse.persistence.запросы.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80) в org.eclipse.persistence.запросы.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90) в организации.eclipse.persistence.internal.запросы.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:301) в org.eclipse.persistence.запросы.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) в org.eclipse.persistence.запросы.DatabaseQuery.execute(DatabaseQuery.java: 899) в org.eclipse.persistence.запросы.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798) в org.eclipse.persistence.запросы.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) в org.eclipse.persistence.запросы.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896) в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1804) в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1786) в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1737) в организации.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:226) в org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:125) в org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4207) в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1441) в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1531) в org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:277) в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1169) в org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:132) … еще 5 вызвано: java.sql.SQLException: соединение доступно только для чтения. Запросы, приводящие к изменению данных, не разрешены в com.mysql.jdbc.SqlError.createSQLException(SqlError.java:1074) в com.mysql.jdbc.SqlError.createSQLException(SqlError.java: 988) в com.mysql.jdbc.SqlError.createSQLException(SqlError.java:974) в com.mysql.jdbc.SqlError.createSQLException(SqlError.java:919) в com.mysql.jdbc.PreparedStatement.executeUpdate( PreparedStatement.java:2409) в com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) в com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:890) … еще 36
` Кто-нибудь может помочь мне решить это? Транскрипция JPA поддерживает подключение к нескольким хостам или кластеру mysql?
Комментарии:
1. Можете ли вы поделиться определением метода, из которого выполняется запрос
2. Спасибо Abhijeet, это произошло из tx.commit() ниже. Помните, что при подключении только к одному хосту это никогда не происходило. Моя библиотека используется долгое время без проблем при подключении только к одному хосту. … tx = emBulk.getTransaction(); if(!tx.isActive()){ tx.begin(); } emBulk.persist(obj); tx.commit(); …
3. попробуйте добавить метод @Transcational on
4. Каким методом? Класс BaseSession не является классом, переопределяющим транзакцию (EntityTransaction)! На самом деле, promote.session. BaseSession.saveBulk() { … tx = emBulk.getTransaction(); if(!tx.isActive()){ tx.begin(); } emBulk.persist(obj); tx.commit(); … }