13

私は単純な実体を持っています。spring-data-jpaバージョン1.2.0.RELEASEとeclipselink2.4.1を使用しています。

@Entity
@Table(name="platform")
public class Platform {

    @Id
    @Column(name="id", nullable=false, updatable=false, insertable=true)
    private Long id;
    // etc.
}

保存したいです。私のリポジトリは次のようになります

public interface PlatformRepository extends JpaRepository<Platform, Long> {

    Platform findByName( String name );
}

私のコントローラーはこの方法で非常に簡単です

@RequestMapping(method=RequestMethod.POST, produces="application/json")
public Platform post( Platform platform ) {
    Platform result = platformDao.saveAndFlush(platform);
    return result;
}

そして、そのメソッドからの応答は

{"platform":{"id":null,"name":"Test1"}}

プラットフォームから*を選択すると、Test1のIDは6であることが示されます。テーブルは次のように定義されます。

create table platform(
id int not null auto_increment primary key,
name varchar(128) not null);

保存後にIDが設定されると思いますが、そうではありません。彼らは私がエンティティを書いた直後にルックアップを行うことを期待していませんよね?

4

1 に答える 1

17

ID がマッピングでデータベースによって自動生成されたことを指定していません。追加

@GeneratedValue(strategy = GenerationType.IDENTITY)

あなたのIDフィールドに。これがないと、生成された ID をデータベースから取得するために挿入後に select ステートメントを実行する必要があることを JPA は認識しません。

于 2012-12-16T09:10:02.883 に答える