mak*_*eli 0 java spring hibernate jpql
@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();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在本地主机上运行代码时RestClient,出现以下异常:
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,这UserDTO是User没有密码参数的类。
如何在 JPQL 中编写正确的 JOIN 查询?
@QueryList<Object>仅当仅从表中选择特定字段时才能返回。建议您将其更改@Query为SELECT 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23016 次 |
| 最近记录: |