下面是DAO。我得到第一个UppeningUsers对象。请注意,在这里对于这个功能,我不想返回位于UppeningUsers内的peopleWhoBlockedMe集合。为什么ResponseEntity在休眠加载时调用休眠
但是在不同的函数中,我想返回这些信息。请注意,它们都是LAZY抓取。随着evict我试图分离的对象,但仍然没有奏效。
首先RESTcontroller在下面。然后DAO代码如下。接下来是两个实体描述。
的问题是:我看到,直到
回报新ResponseEntity(返回,HttpStatus.OK);
只有一个查询是典型的选择。我不希望休眠去,并采取该特定UppeningUser UserBlock信息。因为这个服务响应不需要。然而,即使由于某种原因延迟加载 返回新的ResponseEntity(返回,HttpStatus.OK); 调用休眠。我不知道为什么在restcontroller它仍然连接到数据库。我试图驱逐,但没有工作。
JSON响应是 { “ID”:7, “peopleWhoBlockedMe”:[{ “blockedId”:7}]}
但我不希望这个函数返回这个peopleWhoBlockedMe。它可以是空的。
请注意,在其他服务,例如,我会明确要求这个peopleWhoBlockedMe,但只是这个业务逻辑,我不需要这些信息。所以,当我真正想打电话给peopleWhoBlockedMe时,我可以做些什么来防止这种情况发生。不是自动的。
@RestController
public class TempController {
@Autowired
UppeningUsersService uppeningUsersService;
@RequestMapping(value = "/testing", method = RequestMethod.GET)
public ResponseEntity<UppeningUsers> getPhotos() {
try {
UppeningUsers returned = uppeningUsersService.getUsersDetailsPartial();
return new ResponseEntity<UppeningUsers>(returned, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
这部分是DAO。
@Repository
public class UppeningUsersDAO {
@Autowired
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf) {
this.sessionFactory = sf;
}
/**
* Get Existing user. Return error if there is not.
* @param incomingUser user who requested access.
* @return returns the guy information. All information.
*/
@Transactional
public UppeningUsers getUserDetails() throws Exception {
Session session = this.sessionFactory.getCurrentSession();
Query query = session.createQuery("from UppeningUsers ");
UppeningUsers returning = (UppeningUsers) query.list().get(0);
session.evict(returning);
return returning;
}
}
的主表是这个..
@Entity
@Table(name = "uppening_users")
@Proxy(lazy = true)
public class UppeningUsers {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private
int id;
@OneToMany(mappedBy = "blockedId",cascade =CascadeType.ALL, fetch = FetchType.LAZY)
private Set<UserBlocks> peopleWhoBlockedMe;
public UppeningUsers() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Set<UserBlocks> getPeopleWhoBlockedMe() {
return peopleWhoBlockedMe;
}
public void setPeopleWhoBlockedMe(Set<UserBlocks> peopleWhoBlockedMes) {
this.peopleWhoBlockedMe = peopleWhoBlockedMes;
}
}
现在这里是另一个表。
@Entity
@Table(name="user_blocks")
@Proxy(lazy = true)
public class UserBlocks {
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.IDENTITY)
int id;
@Column(name = "blocked_id",insertable = false,updatable = false)
private int blockedId;
public int getBlockedId() {
return blockedId;
}
public void setBlockedId(int blockedId) {
this.blockedId = blockedId;
}
}
更新:2忘了加上服务
@Service("uppeningUserService")
public class UppeningUsersService {
@Autowired
UppeningUsersDAO uppeningUsersDAO;
public UppeningUsers getUsersDetailsPartial() throws Exception {
return uppeningUsersDAO.getUserDetails();
}
}
在控制器中使用实体类不是一个好主意。阅读关于3层架构 – Jens
然后它不创建重复的类。为什么我不能重用实体中使用的类。 – legend12345
使用一个调试器,看看有多少信息存储在一个实体中,这对控制器来说是不可见的 – Jens