2017-10-09 8 views
0

タイトルのように、POSTリソースのときに自動生成IDを取得する方法を見つけようとしています。nullまたはデフォルトの代わりに自動生成されるId 0

私はembaded h2またはhsqldbデータベースを使用します。

私はすでにテストしていましたか?

  • 私は(結果GET:デフォルトの0は、デフォルトのヌルのために変更)ロングのために長い変更
  • (私はAUTOが身元を同じにする必要があることを知っているが、とにかく試してみました)アイデンティティのための戦略を変更し、私は
  • ここで

(?私は本当にPOSTメソッドからIDを削除する必要があります)例えばポストの多くをreadedこの答えはsimilar post answer固体に見えますが、私は私の場合は違うと思うが、私のコードです:

コントローラー:

package spring.degath.controller; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.*; 
import spring.degath.data.PhoneRepository; 
import spring.degath.model.Phone; 
import spring.degath.services.PhoneService; 
import java.util.List; 

@RestController 
public class PhoneController { 

    @Autowired 
    private PhoneService phoneService; 

    @Autowired 
    private PhoneRepository phoneRepository; 

    @RequestMapping(method = RequestMethod.GET, value = "/phones") 
    public List<Phone> getAllPhones(){ 
     return phoneService.getAllPhones(); 
    } 

    @RequestMapping(method = RequestMethod.GET, value = "/phones/{id}") 
    public Phone getPhone(@PathVariable Long id){ 
     return phoneService.getPhone(id); 
    } 

    @RequestMapping(method = RequestMethod.POST, value = "/phones") 
    public void addPhone(@RequestBody Phone phone){ 
     phoneService.addPhone(phone); 
    } 

} 

サービス:

package spring.degath.services; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import spring.degath.data.PhoneRepository; 
import spring.degath.model.Phone; 
import javax.annotation.PostConstruct; 
import java.util.ArrayList; 
import java.util.List; 

@Service 
public class PhoneService { 

    private List<Phone> phones; 

    @Autowired 
    private PhoneRepository phoneRepository; 

    public List<Phone> getAllPhones(){ 
     return phones; 
    } 

    public Phone getPhone(final Long id){ 
     return phoneRepository.findById(id); 
    } 

    public void addPhone(Phone phone) { 
     phones.add(phone); 
    } 

    @PostConstruct 
    private void initDataForTesting() { 

     phones = new ArrayList<Phone>(); 

     Phone phone1 = new Phone((long) 1,"nokia"); 
     Phone phone2 = new Phone((long) 2,"sony"); 
     Phone phone3 = new Phone((long) 3,"samsung"); 

     phones.add(phone1); 
     phones.add(phone2); 
     phones.add(phone3); 

    } 

} 

リポジトリ:

package spring.degath.data; 
import org.springframework.data.repository.CrudRepository; 
import spring.degath.model.Phone; 

public interface PhoneRepository extends CrudRepository<Phone, String> { 

    Phone findById(Long id); 

} 

モデル:

package spring.degath.model; 
import javax.persistence.*; 
import javax.validation.constraints.NotNull; 

@Entity 
public class Phone { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @NotNull 
    private Long id; 
    private String brand; 

    public Phone(){ 
    } 

    public Phone(Long id, String brand) { 
     super(); 
     this.id = id; 
     this.brand = brand; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getBrand() { 
     return brand; 
    } 

    public void setBrand(String brand) { 
     this.brand = brand; 
    } 
} 

は、私が何をすべきか見当もつかない。あなたの知識を共有してください。

幸運を祈り、 Degath

答えて

1

アイデンティティ戦略AUTOあなたはちょうどそれがIDを生成しなかった理由ですphoneRepository.save()でデータベースに電話保存欠け、正しいです。上記の作業は、リストに追加してリストから戻すだけです。試してみよう:

@Service 
public class PhoneService { 

    private List<Phone> phones; 

    @Autowired 
    private PhoneRepository phoneRepository; 

    public List<Phone> getAllPhones(){ 
     return phones; 
    } 

    public Phone getPhone(final Long id){ 
     return phoneRepository.findById(id); 
    } 

    public void addPhone(Phone phone) { 
     phones.add(phone); 
     phoneRepository.save(phone); 
    } 

    @PostConstruct 
    private void initDataForTesting() { 

     phones = new ArrayList<Phone>(); 

     Phone phone1 = new Phone((long) 1,"nokia"); 
     Phone phone2 = new Phone((long) 2,"sony"); 
     Phone phone3 = new Phone((long) 3,"samsung"); 

     phones.add(phone1); 
     phones.add(phone2); 
     phones.add(phone3); 
     phoneRepository.save(phones); 
    } 

} 
関連する問題