2017-02-15 6 views
0

私はSpringブートとMySQLを使用してRESTful API Webサービスを作成しています。トップレベルでは、私はエンティティsitesを持っています。第2レベルでは、エンティティfloors。各siteには、複数のfloorsが含まれている場合があります。ここでMySQLを使用したスプリングブート - RESTful API Webサービス:SQLエラー:1054、SQLState:42S22、 'フィールドリスト'の未知の列

@Entity 
public class Floors { 

    @Id 
    private String id; 
    private String floor; 

    @ManyToOne 
    private Sites site; 

    public Sites getSite() { 
     return site; 
    } 

    public void setSite(Sites site) { 
     this.site = site; 
    } 

    public Floors(){} 

    public Floors(String id, String floor, String siteId) { 
     super(); 
     this.id = id; 
     this.floor = floor; 
     this.site = new Sites(siteId, "", ""); 
    } 

//getters and setters 

FloorsController次のとおりです:ここで

@RestController 
public class FloorsController { 

    @Autowired 
    private FloorsService floorsService; 

    @RequestMapping("/api/sites/{id}/floors") 
    public List<Floors> getAllFloors(@PathVariable String id){ 
     return floorsService.getAllFloors(id); 
    } 

    @RequestMapping(method = RequestMethod.POST, value = "/api/sites/{siteId}/floors") 
    public void addFloor(@RequestBody Floors floor, @PathVariable String siteId){ 
     floor.setSite(new Sites(siteId, "","")); 
     floorsService.addFloor(floor); 
    } 

} 

SitesServiceである:ここで は、クラスFloorsある

@Service 
public class SitesService { 

    @Autowired 
    private SitesRepository sitesRepository; 

    public List<Sites> getAllSites(){ 
     List<Sites> sites = new ArrayList<>(); 
     sitesRepository.findAll() 
       .forEach(sites::add); 
     return sites; 
    } 

    public void addSite(Sites site){ 
     sitesRepository.save(site); 
    } 
} 

そして、ここで私のFloorsRepository

public interface FloorsRepository extends CrudRepository<Floors, Integer> { 

    public List<Floors> getFloorsBySiteId(String siteId); 
} 
私はそれがうまく機能し、すべてのサイトのリストを取得するには /api/sitesを使用する場合

CREATE TABLE `employeelocator1`.`sites` (
    `id` VARCHAR(45) NOT NULL, 
    `site` VARCHAR(45) NULL, 
    PRIMARY KEY (`id`)); 

CREATE TABLE `employeelocator1`.`floors` (
    `id` VARCHAR(45) NOT NULL, 
    `floor` VARCHAR(45) NULL, 
    `siteId` VARCHAR(45) NULL, 
    PRIMARY KEY (`id`), 
    INDEX `FK_siteId_idx` (`siteId` ASC), 
    CONSTRAINT `FK_siteId` 
    FOREIGN KEY (`siteId`) 
    REFERENCES `employeelocator1`.`sites` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 

は、その後のMySQL Workbenchで、私は2つのテーブルを作成しました。原因私のデータベースとテーブルと間違って何かに

o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1054, SQLState: 42S22 
o.h.engine.jdbc.spi.SqlExceptionHelper : Unknown column 'floors0_.site_id' in 'field list' 

それは:私は/api/sites/1/floorsを使用してサイト#1の全フロアのリストを取得しようとする。しかし、私はエラーを取得しますか?コードに何か問題がありますか?

答えて

0

私の質問に対する答えが見つかりました。 floors表中のFKはSites Entitysite_idなくsiteId

0

を命名されている必要があり、また、あなたの問題を解決するために、次のように定義することができます。

@Id 
@Column(name = "id", nullable = false) 
private String site_id; 
関連する問題