Вставка JpaRepository не работает [Spring Boot + MySQL] - PullRequest
0 голосов
/ 16 июня 2019

Прежде всего, я должен заявить, что в моем проекте включены 3 базы данных.

Кажется, что любой метод о вставке в базу данных не применяется, но методы выбора делают. Странно то, что Spring Boot не может определить, какую базу данных использовать, поскольку тот же репозиторий выбирает правильную базу данных, но не может вставить. Кроме того, я не получаю ошибок ни в среде Java, ни в MySQL (я включил параметры отладки на application.properties)

Подводя итог, метод save не вставляется в базу данных, но тот же репозиторий выбирает без проблем. Я проверил, если у меня есть привилегии для вставки в базу данных, и я делаю (я также добавил их снова на всякий случай). Я использую одну и ту же сущность как для выделения, так и для вставки. Таблица, к которой я хочу получить доступ, называется log, а база данных db1. Кроме того, вставка работает на db3.

Кроме того, я настроил DataSource для всех трех баз данных. Я хотел бы добавить, что в трех базах данных есть несколько таблиц с одинаковым именем. По другим причинам я не могу дать вам точное наименование, но я бы, конечно, попробовал любые предложения по именованию. Но я должен сказать, что на всех трех базах данных выбор происходит именно так, как хотелось.

application.properties

server.port=8086

db1.datasource.test-on-borrow=true
db1.datasource.validation-query=SELECT 1

db2.datasource.test-on-borrow=true
db2.datasource.validation-query=SELECT 1

db3.datasource.test-on-borrow=true
db3.datasource.validation-query=SELECT 1

spring.jpa.hibernate.ddl-auto=validate

jwt.header=Authorization
jwt.secret= //mysecret
jwt.expiration=14400
jwt.route.authentication.path=/login
jwt.route.authentication.refresh=/refresh

spring.profiles.active=prod

webapp.cors.allowedOrigins= //list of allowed origins


spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

application-prod.properties

server.port=8086

db1.datasource.url= //db1 url
db1.datasource.username= //username
db1.datasource.password= //password
db1.datasource.driverClassName=com.mysql.jdbc.Driver

db1.datasource.test-on-borrow=true
db1.datasource.validation-query=SELECT 1

db2.datasource.url= //db2 url
db2.datasource.username= //username
db2.datasource.password= //password
db2.datasource.driverClassName=com.mysql.jdbc.Driver

db2.datasource.test-on-borrow=true
db2.datasource.validation-query=SELECT 1

db3.datasource.url= //db3 url
db3.datasource.username= //username
db3.datasource.password= //password
db3.datasource.driverClassName=com.mysql.jdbc.Driver

db3.datasource.test-on-borrow=true
db3.datasource.validation-query=SELECT 1

Log сущность JPA, log - имя таблицы в базе данных db1

@Entity
@Table(name = "log" , catalog = "db1")
public class Log implements Serializable{

    private static final long serialVersionUID = 1L;


    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long logID;
    private Integer uploadSeq;
    private String date;

    public Log() {
    }

    public Log(Integer uploadSeq, String date) {
        this.uploadSeq = uploadSeq;
        this.date = date;
    }


    @Column(name = "logID", unique = true, nullable = false)
    public Long getLogID() {
        return logID;
    }


    public void setLogID(Long logID) {
        this.logID = logID;
    }


    @Column(name = "uploadSeq", nullable = false)
    public Integer getUploadSeq() {
        return uploadSeq;
    }


    public void UploadSeq(Integer uploadSeq) {
        this.uploadSeq = uploadSeq;
    }


    @Column(name = "date", nullable = false)
    public String getDate() {
        return date;
    }


    public void setDate(String date) {
        this.date = date;
    }

}

Db1LogRepository хранилище для log таблица

public interface Db1LogRepository extends JpaRepository<Log,Long> {


    public Log findFirstByOrderByLogIDDesc(); //is being used on another part of the project

}

Db1LogComponent компонент для доступа к хранилищу

@Component
public class Db1LogComponent {

    @Autowired
    Db1logRepository db1LogRepository;


    public void addDate(Log log) {

        System.out.println(db1LogRepository.findAll().size()); //Retrieves the correct entities of the table log in db1
        db1LogRepository.save(log); //Doesn't save to the database
    }

}

Редактировать: DB3 имеет @Primary аннотацию в файле конфигурации, в отличие от двух других конфигов о двух других базах данных.

1 Ответ

1 голос
/ 16 июня 2019

Убедитесь, что вы используете аннотации @Repository @Transactional поверх репозитория, как показано ниже.

@Repository
@Transactional
public interface Db1LogRepository extends JpaRepository<Log,Long> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...