[英]Custom @Query for JpaRepository. Table name shown as red colored
[英]JpaRepository database connection error on @query the table showing red
幫我大師...我一直有錯誤無法解析我的 JpaRepository 上的符號
查詢@Query(value="SELECT i FROM AkunIpaddressEnt i ORDER BY i.ID DESC")
“AkunIpaddressEnt”這個詞查詢我的查詢顯示紅色我確定一切都在正確的地方,我正在使用 intelij spring-boot JpaRepository
我的倉庫
@Repository
@Transactional("dbilapTransactionManager")
public interface AkunIpaddressRepo extends JpaRepository<AkunIpaddressEnt,Integer> {
@Query(value="SELECT i FROM AkunIpaddressEnt i ORDER BY i.ID DESC")
List<AkunIpaddressEnt> getlistIPaddress();
}
我的實體
@Data
@Entity
@Table(name="AKUN_IPADDRESS")
public class AkunIpaddressEnt {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AKUNIPADRESSSEQUENCE")
@SequenceGenerator(sequenceName = "AKUNIPADRESSSEQUENCE", allocationSize = 1, name = "AKUNIPADRESSSEQUENCE")
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
我的配置
@Configuration
@PropertySource({"classpath:application.properties"})
@EnableJpaRepositories(
basePackages = "com.repository.dbilap",
entityManagerFactoryRef = "dbilapEntityManager",
transactionManagerRef = "dbilapTransactionManager")
public class DbConDBILAP {
@Autowired
private Environment env;
@Bean
public DataSource DbilapDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("datasource2.driverClassName"));
dataSource.setUrl(env.getProperty("datasource2.url"));
dataSource.setUsername(env.getProperty("datasource2.username"));
dataSource.setPassword(env.getProperty("datasource2.password"));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean dbilapEntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(DbilapDataSource());
em.setPackagesToScan(
new String[] { "com.entity.dbilap" });
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect",
env.getProperty("datasource2.hibernate.dialect"));
properties.put("show.sql",
env.getProperty("datasource2.hibernate.show.sql"));
em.setJpaPropertyMap(properties);
return em;
}
@Bean
public PlatformTransactionManager dbilapTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
dbilapEntityManager().getObject());
return transactionManager;
}
}
我的屬性
datasource2.url=jdbc:oracle:thin:@0.0.0.0:1521:DBILAP
datasource2.username=MYUSERNAME
datasource2.password=MYPASSWORD
datasource2.driverClassName=oracle.jdbc.OracleDriver
datasource2.hibernate.dialect=org.hibernate.dialect.Oracle8iDialect
datasource2.hibernate.show.sql=true
怎么了?
Spring Data 中的查詢應該引用實體名稱和屬性名稱,而不是表名稱和列名稱。
所以,你的查詢應該是:
@Query(value="SELECT i FROM AkunIpaddressEnt i ORDER BY i.id DESC")
代替:
@Query(value="SELECT i FROM AKUN_IPADDRESS i ORDER BY i.ID DESC")
還要刪除實體的 (name="dbilapEntityManager"),因為您正在使用與實體本身無關的名稱覆蓋查詢中預期的實體名稱。
最后在@Table 中,您應該使用“name”屬性而不是“schema”屬性來定義表名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.