2011-12-05 2 views
1

나는 안정된 웹 서비스의 기본 개념을 오해하고 있습니까? Restable PUT을 사용하려고하는 Android 앱이 있습니다. 두 개의 Mysql 테이블 국가 및 StateProvince countryId StateProvince 테이블의 외래 키. 내가 사용 인 StateProvince에 PUT을하려고하면안정된 웹 서비스 - 외래 키 유지

의 I 아래의 오류가

<StateProvince><stateName>Victoria</stateName><countryId>1</countryId></StateProvince>

다음과 같습니다. 외래 키와 휴식에 관한 기본 개념을 오해하고 있습니까?

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseExcepti on 
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Column 'country_id' cannot be null 
Error Code: 1048 
Call: INSERT INTO state_province (state_id, state_name, country_id) VALUES (?, ?, ?) 
bind => [3 parameters bound] 
Query: InsertObjectQuery(com.pezoot.models.StateProvince[ stateId=2 ]) 
+2

조사 할 것입니다. –

+0

PUT 요청 본문에 country_id가 있습니까? 유효한 country_id? 서버 측 코드가 국가 ID를 올바르게 처리합니까? –

답변

1

간단한 답변 : country_id가 null이므로 데이터베이스/지속성 문제와 유사합니다. 은 StateProvince의 국가를으로 설정하지 않았거나 국가에 StateProvince를 추가하지 않았습니다. 코드를 보지 못 했으므로 매핑 방법을 모릅니다.

긴 답변 :

왜 HTTP 요청의 일부로 밀고 들어가는 데이터베이스 식별자가?

당신은 URI를 자원의 측면에서 생각을 시작해야 - 당신의 인 StateProvince 표현 (특정 URI의 PUT 동사를 처리 <link rel="country" href="/country/1" />하고 자원 클래스의 예를 국가 관련 링크의 어떤 종류를해야한다, URI를 도메인 객체, 즉 (EclipseLink를 사용하고있는 것처럼 보이는) 엔티티로 변환 할 수 있어야합니다. 엔티티는 setter 메소드 등을 사용하여 데이터베이스 관계를 설정할 수 있습니다. REST 관계와 데이터베이스 관계는

. 근본적으로 다르다 그것은 간단한 개념처럼 보이는 (HTTP verbage를)를 처리하는 연습과주의 깊은 생각을합니다 영속 유닛을 얻으십시오. PUT처럼 직선적 인 것으로 보이는 부분은 REST가 기대하는대로 작동하도록하기 위해 중요하지 않은 처리가 필요합니다.

URI에 데이터베이스 식별자를 사용하는 것이 쉽습니다 (특히 국가/1/stateprovince/2와 같은 마술처럼 우연히 발견되는 하위 리소스를 사용하는 경우 특히 그렇습니다) 자신에게 물어보십시오. 국가/1입니까? 아니면 국가/미국입니까 - 자신에게 물어야합니다. 국가와 주 /도는 실제로 엔티티입니까? 아니면 그냥 가치 개체입니까? 정말로 주 전체를 PUT 할 의향이 있습니까?

0

감사합니다.

다시 한번 (당연히)는 구문 오류 것으로 보인다. 내가 사용하는 경우 다음

<stateProvince> 
     <countryId> 
      <countryId>1</countryId> 
     </countryId> 
     <stateName>New South Wales</stateName> </stateProvince> 

헤이 프레스토가 작동합니다. 당신의 응답이 내가 추구하고 통찰력의 일종이다 - 나는 이전에 위의 그림과 같이 (아래에서 예전의 코드를 참조)

<stateProvince> 
     <countryId>1</countryId> 
     <stateName>New South Wales</stateName> </stateProvince> 

덕분 더그가 countryId을 포함하는 데 실패했다. 나는 당신이 설명하는대로 나는 꽤 링크의 사용을 주위에 내 머리를 감쌌다 생각 해달라고 -하지만 이것은 SQL/데이터베이스 문제이며, 그것은 전혀 REST와 아무 상관이 더 지금