2

Spring 3.1.2を使用してWebアプリケーションを開発しており、カスタム行マッパーを作成する必要があります。RowMapperを実装するプライベート静的finalクラスを作成しましたが、「タイプRowMapperはジェネリックではありません。引数でパラメーター化できません」というエラーメッセージが表示されます。

私のlibフォルダー内のすべてのSpring関連のjarは、3.1.2.RELEASEバージョンです。私は他の場所でそのようなものを見つけることができませんでした。なぜこれが起こっているのか考えはありますか?

ありがとう。

サンプルコードは次のとおりです。

public class OutPatient extends Patient{
     @Pattern(regexp="[0-9]+", message="OPD No. should only contain digits.")
String opdNo;

public String getOpdNo() {
    return opdNo;
}

public void setOpdNo(String opdNo) {
    this.opdNo = opdNo;
}
}

DAOクラス:

 @Repository("dbHelper")
 public class DBHelperImpl{
private JdbcTemplate jdbcTemplate;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

@Autowired
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
    this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}

     public List<OutPatient> fetchOutPatients() {
    String sql = "SELECT  OPDNO as opdNo FROM `test`.`out_patient`";

    @SuppressWarnings("unchecked")  //Have to add this annotation to prevent warning
    List<OutPatient> outPatients = jdbcTemplate.query(sql, new OutPatientRowMapper());
    return outPatients;     

}

     private static final class OutPatientRowMapper implements RowMapper{  //Unable to add <OutPatient> generics here!      
    public OutPatient mapRow(ResultSet rs, int rowNum) throws SQLException {
        OutPatient outPatient = new OutPatient();           
        outPatient.setOpdNo(rs.getString("opdNo"));
                       return outPatient;
              }
     }
4

6 に答える 6

8

私はこれと同じ種類の問題を抱えていました.EclipseはRowMapperが一般的ではないことを警告しました.

だから私は手動でインポートを書きました:

import org.springframework.jdbc.core.RowMapper;

このエラーが発生したのは次のとおりです。The import org.springframework.jdbc.core.RowMapper collides with another import statement

そこで、他のインポート ステートメントを調べて、Spring プロジェクトに潜んでいるものを見つけました。

javax.swing.tree.RowMapper をインポートします。

...そのインポートを削除すると、すべてが正常に機能しました。

于 2014-11-08T01:10:45.700 に答える
2

それはこのようなものでなければなりません

List<Bank> list = t.query(sql, args, new RowMapper<Bank>() {
    @Override
    public Bank mapRow(ResultSet rs, int rowNum) throws SQLException {
        Bank t = new Bank();
        t.setName(rs.getString("name"));
        return t;
    }
});

このコードも警告なしでコンパイルされます

   private static final class OutPatientRowMapper implements
            RowMapper<OutPatient> {
        public OutPatient mapRow(ResultSet rs, int rowNum) throws SQLException {
            OutPatient outPatient = new OutPatient();
            outPatient.setOpdNo(rs.getString("opdNo"));
            return outPatient;
        }
    }
于 2012-12-11T12:27:42.517 に答える
1

上記の答えはどれもうまくいきませんでした。適切な Maven 依存関係がすべてありました。それらは pom.xml ファイルで間違った順序になっていました。以下の順番に変更したら、RowMapperがパラメータ化されたクラスとして認識されました。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>20030825.184428</version>
    </dependency>
  </dependencies>
于 2016-12-28T18:59:23.500 に答える
0

もう少しいじってから、問題の解決策を見つけました。Tomcat の lib フォルダーには、いくつかの古い Spring jar (2.0 だと思います) がありました。これにより、パラメーター化をサポートしていない古いバージョンの RowMapper を使用して春になりました。

この問題の解決策は、ビルド パスから古い jar を削除するか、[注文とエクスポート] タブで jar の順序を変更して最新の jar を一番上に移動することです。

回答してくれたすべての人に感謝します!

于 2012-12-12T09:36:27.223 に答える
0

これらの依存関係を追加する必要があります

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.4.RELEASE</version>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
于 2013-12-18T09:32:39.150 に答える