我有兩個表用戶和用戶角色。這些是我創建的物體類,
@Entity
@Table(name="users")
public Users {
@Id
@Column(name = "id")
private Long userId;
@ManyToOne(cascade=CaseCadeType.ALL)
@JoinColumn("user_role_id")
private UserRole userRole;
@Column(name = "user_name")
private String userName;
}
@Entity
@Table(name="users_Roles")
public UsersRoles {
@Id
@Column(name = "user_role_id")
private Long userRoleId;
@Column(name = "user_role_name")
private String userRoleName;
}
存盤庫類,
@Repository
public interface UsersRepository extends JpaRepository<Users ,Long>{
public List<Users> findByUserName(String userName);
}
為此,我能夠得到這樣的 Json 結果。
[
{
"userid":"1",
"username":"user1",
"userrole": {
"userroleid":"1",
"userrolename":"ADMIN",
}
},
{
"userid":"2",
"username":"user2",
"userrole": {
"userroleid":"2",
"userrolename":"INTERN",
}
}
]
而不是這個,我可以得到這樣的東西..
[
{
"userid":"1",
"username":"user1",
"userrolename":"ADMIN",
},
{
"userid":"2",
"username":"user2",
"userrolename":"INTERN",
}
]
我需要在物體類中進行哪些更改才能僅獲取用戶角色名。
uj5u.com熱心網友回復:
我認為您需要為以下內容創建一個吸氣劑userrolename:
public String getUserRoleName() {
return userRole.getUserRoleName();
}
要忽略不需要的欄位,請使用@JsonIgnore
uj5u.com熱心網友回復:
您可以嘗試在您的物體中使用 @Converter 注釋。但是,通過這種方式,您將在物體中擁有字串(或者最好是列舉),這將產生您想要的 json。
uj5u.com熱心網友回復:
您可以使用 DTO 和 modelMapper 庫來實作這一點:
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>current version</version>
</dependency>
public class UsersDTO {
String userid ;
String username ;
String userrolename ;
}
UsersDTo dto=modelMapper.map(user, UsersDto.class);
另一種方法是在您的存盤庫中實體化 dto 類
@Query("SELECT new de.smarterco.example.dto.UsersDTO(u.id, u.username ,ur.name )
FROM Users u
join u.UsersRoles ur")
List<UsersDTO> findUsersDTo();
最后一種方法是通過將 dto 創建為介面來使用 jpa 投影
public intefaceUsersDTO {
String getuserid() ;
String username () ;
String userRoleName ();
}
并在您的回購中:
@Query("SELECT u.id , u.username ,ur.name as userRoleName )
FROM Users u
join u.UsersRoles ur")
List<UsersDTO> findUsersDTo();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/467593.html
