2015-03-10 2 views
0

У меня есть два класса: один пользователь, а другой - этнический. Оба имеют одну к одной ассоциации, этническая принадлежность имеет внешний ключ user_id, но проблема в том, что я получаю нулевое значение против столбца внешнего ключа в таблице этнической принадлежности. Я устанавливаю эти значения динамически, используя страницу jsp.Как сохранить значение внешнего ключа, используя аннотацию Hibernate и JPA

Моих отображений являются следующими

User Class 
@OneToOne(cascade = CascadeType.ALL, mappedBy="user") 
public Ethnicity ethnicity; 
getter/setter 


Ethnicity Class 
@OneToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "user_id") 
public User user; 
getter/setter 

Чтобы получить данные, я использую ту же страницу JSP, где я устанавливаю значение. Вот код, как я получаю данные

<c:forEach items="${userList}" var="user"> 
    <tr> 
     <td>${user.userId}</td> 
     <td>${user.username}</td> 
     <td>${user.password}</td> 
     <td>${user.firstName}</td> 
     <td>${user.lastName}</td> 
     <td>${user.active}</td> 
     <td>${user.ethnicity.ethnicityId }</td> 
     <td>${user.ethnicity.nationality }</td> 
     <td>${user.ethnicity.race }</td> 
     <td>${user.ethnicity.region }</td> 
     <td>${user.ethnicity.religion }</td> 
    </tr> 
</c:forEach> 

Это одна из функций, которые нужно добавить пользователю.

@Service 
@Transactional(readOnly = true) 
public class UserServiceImp implements UserService { 
@Autowired 
private UserRepository userRepository; 

@Autowired 
private Mapper mapper; 

@Transactional 
public void add(UserDTO userDTO) { 
    User user = mapper.map(userDTO, User.class); 
    userRepository.save(user); 
} 
} 

класс обслуживания пользователя расширяет JpaRepository и EntityManager Я использую Maven зависимостей.

+0

и как вы их продолжали? и вы установили ОБОИХ сторон отношения? и как вы их получили? –

+0

@NeilStockton см. Обновленный код. – Bilal

+0

где? Вы не указываете код JPA, вы не упоминаете, как вы установили связь и сохранили их. –

ответ

0
  • Поставщик JPA не выполняет автоматическую обработку отношений между объектами на основе значений базы данных.
  • Обязанность разработчика приложений - поддерживать отношения.
  • Отношение должно быть установлено между Этничностью и пользователем т.е. должна быть набором enthnicity для пользователя, а также набор пользователей для этнической принадлежности, как вы создали двунаправленную связь.

    user.setEthnicity(ethnicity); 
    ethnicity.setUser(user); 
    

Это должно работать.

Я написал около jpa relationshions on www.thejavageek.com, где вы можете найти несколько полезных уроков о jpa.

+0

Я новичок, это мой первый опыт работы с этой технологией. Я не знаю много обо всем этом. Не могли бы вы рассказать мне, где добавить этот код? – Bilal

+0

@Bilal любезно следуйте по ссылке, указанной в ответе. Он должен решить вашу проблему. Если он все еще не стесняется спрашивать. –

+0

Сэр Я делаю все это динамически, я не могу понять, где разместить этот код.Я не использую entitymanager для всего этого в своем java-кодировании. Нужна помощь. – Bilal

Смежные вопросы