【问题标题】:JpaRepository database connection error on @query the table showing red@query 上的 JpaRepository 数据库连接错误,表显示为红色
【发布时间】:2020-09-30 22:39:04
【问题描述】:

各位大神帮帮忙... 我的 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

怎么了?

【问题讨论】:

  • 您有任何堆栈跟踪要分享或完整的编译错误消息吗?

标签: java spring-boot


【解决方案1】:

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”属性来定义表名。

【讨论】:

  • Can't resolve symbol 'AkunIpaddressEnt' 此检查控制 Persistence QL 查询是否经过错误检查
  • 似乎是 IntelliJ IDEA 配置的问题,而不是查询本身。对此无能为力,因为我使用的是 Eclipse。检查这个可能有帮助的答案:stackoverflow.com/a/34178738/3993742
猜你喜欢
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2018-03-17
  • 2017-09-24
  • 1970-01-01
  • 2018-05-21
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多