2017-11-19 9 views
0
@Entity 
@Table(name="tblUser")  
public class User { 

@Id 
@GeneratedValue 
@Column(name="id") 
private Long id; 

@Column(name="email",nullable=false) 
private String email; 

@Column(name="password",nullable=false) 
private String password; 

@Column(name="first_name") 
private String firstName; 

@Column(name="last_name") 
private String lastName; 

@OneToMany(mappedBy="user") 
private List<Address> addresses = new ArrayList<>(); 
} 



@Entity 
@Table(name="tblAddress") 
public class Address { 

@Id 
@GeneratedValue 
@Column 
private Long id; 

@Column 
private String streat; 

@Column 
private String number; 

@ManyToOne(fetch=FetchType.EAGER) 
private User user; 
} 



public interface UserService { 
List<User> findAll(); 
} 



@Service 
public class JpaUserService implements UserService { 
@Autowired 
private UserRepository userRepository; 

@Override 
public List<User> findAll() { 
    return userRepository.findAll(); 
    } 
} 



@Controller 
@RequestMapping(value="/api/users") 
public class ApiUserController { 

@Autowired 
private UserService userService; 

@Autowired 
private UserDTOToUser toUser; 

@Autowired 
private UserToUserDTO toDto; 

@RequestMapping(method=RequestMethod.GET) 
ResponseEntity<List<UserDTO>> getUser() 

List<User> users = userService.findAll(); 

if(users == null || users.isEmpty()){ 
    return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
} 

return new ResponseEntity<>(toDto.convert(users), HttpStatus.OK); 
    } 
} 



@Repository 
public interface UserRepository extends JpaRepository<User, Long> { 

@Query("select u.id, a.number FROM User u LEFT JOIN u.addresses a WHERE u.id = a.user") 
List<User> findAll(); 
} 

JOINを、私はこの例外を取得:2つのテーブルJPQL

{ 
"timestamp": 1511105123172, 
"status": 500, 
"error": "Internal Server Error", 
"exception": "java.lang.ClassCastException", 
"message": "[Ljava.lang.Object; cannot be cast to jwd.wafepa.model.User", 
"path": "/api/users" 
} 

ちょうどUserDTOはpasswordパラメータなしUserクラスであることを、言及します。

どのように適切な書き込みJPQLでクエリを結合するために?唯一の特定のフィールドをテーブルから選択された場合

答えて

1

@QueryList<Object>を返すことができます。 @QuerySELECT u FROM User u LEFT JOIN u.addresses a WHERE u.id = a.userに変更することをお勧めします。

@Repository 
public interface UserRepository extends JpaRepository<User, Long> { 
    @Query("SELECT u FROM User u LEFT JOIN u.addresses a WHERE u.id = a.user") 
    List<User> findAll(); 
} 
+0

私はそれを得ました。 RestClientのフィールドをリストする方法はありますか?あるいは、オブジェクト全体を取得できますか? – makaveli

+0

それだけで特定のフィールドを取得することが可能ですが、戻り値のオブジェクトは '一覧'です。 'toDto'の' convert() 'メソッドを変更する必要があります。 –