Извлечение значения из атрибута внешнего ключа, имеющего тип данных упомянутой сущности, с использованием Spring

Я пытаюсь реализовать пример объединения нескольких таблиц с использованием CriteriaQuery из Criteria API. Я использовал 3 таблицы Users, UserRoleMapping и Roles,

  1. Пользователи - UserRoleMapping с ассоциацией OneToOne
  2. Роли - UserRoleMapping, имеющий ассоциацию OneToMany

Я реализовал функциональность соединения и правильно получил данные. Но здесь, когда я получаю доступ к данным внешнего столбца, я не могу получить их, поскольку этот столбец является внешним ключом, имеющим тип данных ссылочной сущности.

мой класс модели Users.java, имеющий такую ​​связь,

@Id
@Column(name="nuser_id")
public Integer nuserId;

@OneToOne(mappedBy="nuserId")
public UserRoleMapping roleUserRoleMappingMappingJoin;

И класс модели UserRoleMapping.java имеет такую ​​связь, как,

@Id
@Column(name="nuser_role_mapping_id")
public Integer nuserRoleMappingId;

@OneToOne()
@JoinColumn(name="nuser_id")
public Users nuserId;

@ManyToOne(optional = false)
@JoinColumn(name="nrole_id" , referencedColumnName="nrole_id")
public Roles nrole_id;

И Roles.java,

@Id
@Column(name = "nrole_id")
public Integer nrole_id;

@Column(name="srole_desc")
public String srole_desc;

@Column(name="bis_staff_member")
public boolean bis_staff_member;

@OneToMany(cascade = CascadeType.ALL , mappedBy="nrole_id")
public Set<UserRoleMapping> roleUserMappingJoin;

Здесь мы видим, что в UserRoleMapping свойство "nuserId" является типом "Users" . Это внешний ключ. А свойство "nrole_id" относится к типу "Roles".

Когда мы запрашиваем nrole_id из UserRoleMApping для определенного имени пользователя, присоединяя Users и UserRoleMapping с помощью следующего кода:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Users> cq = cb.createQuery(Users.class);
Root<Users> rUsers = cq.from(Users.class)
Join<Users,UserRoleMapping> userRoleCollectonObj = rUsers.join("roleUserRoleMappingMappingJoin");
cq.select(userRoleCollectonObj.get("nrole_id"));
cq.where(cb.equal(rUsers.get("susername"),"mjolley109"));    
List<Users> results = em.createQuery(cq).getResultList();
System.out.println("User Role Id Is =: " + results.get(0));

Я получаю только результат "Идентификатор роли пользователя = =: com.spacestudy.model.Roles@52489fe ". После применения ассоциации его тип меняется на тип сущности "Роли". Так что целочисленный доступ не имеет места. На самом деле столбец содержит значения, такие как 1, 2, 3 и т. Д.

Если ситуация похожа на описанную выше, как я могу управлять и получать доступ к идентификатору роли из объединенной ассоциации, имеющей тип данных упомянутой сущности? Может ли кто-нибудь помочь мне разрешить эту ситуацию, пожалуйста?

0 ответов

Другие вопросы по тегам