Краткий ответ: country_id имеет значение null, поэтому это похоже на проблему с базой данных / постоянством. Возможно, вы не установили страну для StateProvince (или не добавили StateProvince в страну - вы не видели ваш код, поэтому я не знаю, как вы отображаете данные).
Длинный ответ:
Почему идентификатор базы данных входит в ваш HTTP-запрос?
Вам нужно начать думать с точки зрения URI и ресурсов - ваше представление StateProvince должно иметь какую-то ссылку , которая относится к стране по определенному URI (например, <link rel="country" href="/country/1" />
и в вашем классе ресурсов, которые Обрабатывает глагол PUT, вам нужно иметь возможность преобразовать этот URI в объект домена, сущность (как кажется, вы используете EclipseLink), которую вы можете использовать с помощью какого-либо метода установки или чего-то еще для установления отношения с базой данных. Отношения REST и отношения с базой данных принципиально различны.
Требуется практика и тщательное размышление, чтобы справиться с тем, что кажется простой концепцией (HTTP verbage) с вашей единицей персистентности. Что-то, что кажется простым, например PUT
, требует нетривиальной обработки, чтобы заставить его работать так, как ожидал бы REST.
Соблазнительно использовать идентификаторы базы данных в URI, потому что это легко (особенно если вы используете подресурсы, которые просто волшебным образом знают, кто их родитель: например, страна / 1 / stateprovince / 2), но вы должны отступить и спросить Вы сами, это страна / 1 или страна / США - вы также должны спросить себя, действительно ли страна и штат / провинция - это субъект? или это просто объект значения? Вы действительно намереваетесь ПОЛОЖИТЬ штат / провинцию в полном объеме?