Java JpaRepository插入不起作用[Spring Boot+MySQL]

Java JpaRepository插入不起作用[Spring Boot+MySQL],java,mysql,spring,spring-boot,Java,Mysql,Spring,Spring Boot,首先,我必须声明在我的项目中启用了3个数据库 任何关于插入数据库的方法似乎都不适用,但select方法适用。这很奇怪,并不是因为Spring Boot无法确定要使用哪个数据库,因为同一个存储库从正确的数据库中选择,但无法插入。此外,在Java环境中和MySQL中,我都没有发现错误,我在application.properties上启用了调试选项 总而言之,save方法不会插入到数据库中,但相同的存储库选择时不会出现任何问题。我检查了我是否有权限插入到数据库中,我确实有权限,我还再次添加了它们以防

首先,我必须声明在我的项目中启用了3个数据库

任何关于插入数据库的方法似乎都不适用,但select方法适用。这很奇怪,并不是因为Spring Boot无法确定要使用哪个数据库,因为同一个存储库从正确的数据库中选择,但无法插入。此外,在Java环境中和MySQL中,我都没有发现错误,我在application.properties上启用了调试选项

总而言之,save方法不会插入到数据库中,但相同的存储库选择时不会出现任何问题。我检查了我是否有权限插入到数据库中,我确实有权限,我还再次添加了它们以防万一。 我对选择和插入使用相同的实体。 我要访问的表名为log,数据库为db1。此外,插入在db3上工作

此外,我还为所有三个数据库配置了DataSource。 我想补充一点,三个数据库上有多个同名的表。出于其他原因,我不能给你确切的名字,但我当然会尝试任何关于命名的建议。但我必须说,在所有三个数据库上,选择都完全按照需要进行

应用程序属性

application-prod.properties

Log JPA实体,Log是数据库db1中表的名称

用于日志表的Db1LogRepository存储库


编辑:DB3在配置文件上有@Primary注释,而其他两个关于其他两个数据库的配置没有

确保您正在使用@Repository @存储库顶部的事务性注释,如下所示

@Repository
@Transactional
public interface Db1LogRepository extends JpaRepository<Log,Long> 

我已经尝试了很多注释,但你的建议似乎无法解决问题。我需要添加@Transactionaldb1TransactionManager。我将您的答案标记为正确答案,因为它引导我搜索更多关于@Transactional的信息,很高兴它对您有所帮助。
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
@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;
    }

}
public interface Db1LogRepository extends JpaRepository<Log,Long> {


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

}
@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
    }

}
@Repository
@Transactional
public interface Db1LogRepository extends JpaRepository<Log,Long>