我有一個 Spring boot Entity 定義為:
@Data
@Entity
@Table(name = "TaxOffice")
public class TaxOffice {
public TaxOffice(){}
public TaxOffice(int id, String name, int voivodeship_id){
this.id = id;
this.name = name;
this.voivodeship_id = voivodeship_id;
}
@Id
private int id;
@Column(name="name")
private String name;
@Column(name="voivodeship_id")
private int voivodeship_id;
@ManyToOne
@JoinColumn(name = "city_id")
private City city;
@OneToOne
@JoinColumn(name = "details_id")
private TaxOffice_Detail taxOffice_details;
}
在 application-test.properties 中,我有以下設定:
spring.datasource.url=jdbc:h2:mem:TestDB;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.defer-datasource-initialization=true
當我運行這個測驗
@Test
void findAllByCity_idTest(){
assertEquals(1, taxOfficeService.findAllByCity_id(48).size());
}
我收到此錯誤:
org.h2.jdbc.JdbcSQLSyntaxErrorException:
Table "TAX_OFFICE" not found; SQL statement:
/* select t from TaxOffice t where t.city.id = :id */ select taxoffice0_.id as id1_1_, taxoffice0_.city_id as city_id4_1_, taxoffice0_.name as name2_1_, taxoffice0_.details_id as details_5_1_, taxoffice0_.voivodeship_id as voivodes3_1_ from tax_office taxoffice0_ where taxoffice0_.city_id=? [42102-210]
沒有表“TAX_OFFICE”,但是有“TaxOffice”,為什么要找“TAX_OFFICE”呢?為什么會發生這種情況,我該如何解決?
編輯:TaxService.java
@Transactional
@Service
public class TaxOfficeService {
@Autowired
TaxOfficeRepository taxOfficeRepository;
public List<TaxOffice> findAllByCity_id(int id){
return taxOfficeRepository.findAllByCity_id(id);
}
}
稅務局資料庫
@Repository("taxOfficeRepository")
public interface TaxOfficeRepository extends JpaRepository<TaxOffice,Integer> {
@Query("select t from TaxOffice t where t.city.id = :id")
List<TaxOffice> findAllByCity_id(int id);
}
uj5u.com熱心網友回復:
Hibernate 和 Spring 默認具有命名策略,它們決定了物體類必須如何編譯以及如何生成表和列名。這可以通過應用程式屬性或休眠組態檔根據用途進行定制。
例如
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462573.html
