Java JpaRepository插入不起作用[Spring Boot+MySQL]
首先,我必须声明在我的项目中启用了3个数据库 任何关于插入数据库的方法似乎都不适用,但select方法适用。这很奇怪,并不是因为Spring Boot无法确定要使用哪个数据库,因为同一个存储库从正确的数据库中选择,但无法插入。此外,在Java环境中和MySQL中,我都没有发现错误,我在application.properties上启用了调试选项 总而言之,save方法不会插入到数据库中,但相同的存储库选择时不会出现任何问题。我检查了我是否有权限插入到数据库中,我确实有权限,我还再次添加了它们以防万一。 我对选择和插入使用相同的实体。 我要访问的表名为log,数据库为db1。此外,插入在db3上工作 此外,我还为所有三个数据库配置了DataSource。 我想补充一点,三个数据库上有多个同名的表。出于其他原因,我不能给你确切的名字,但我当然会尝试任何关于命名的建议。但我必须说,在所有三个数据库上,选择都完全按照需要进行 应用程序属性 application-prod.properties Log JPA实体,Log是数据库db1中表的名称 用于日志表的Db1LogRepository存储库Java JpaRepository插入不起作用[Spring Boot+MySQL],java,mysql,spring,spring-boot,Java,Mysql,Spring,Spring Boot,首先,我必须声明在我的项目中启用了3个数据库 任何关于插入数据库的方法似乎都不适用,但select方法适用。这很奇怪,并不是因为Spring Boot无法确定要使用哪个数据库,因为同一个存储库从正确的数据库中选择,但无法插入。此外,在Java环境中和MySQL中,我都没有发现错误,我在application.properties上启用了调试选项 总而言之,save方法不会插入到数据库中,但相同的存储库选择时不会出现任何问题。我检查了我是否有权限插入到数据库中,我确实有权限,我还再次添加了它们以防
编辑: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>