Java onetomany偷懒冬眠essue
我有一个懒惰的抓取问题,我不知道为什么会发生。 我有两个实体:Java onetomany偷懒冬眠essue,java,hibernate,Java,Hibernate,我有一个懒惰的抓取问题,我不知道为什么会发生。 我有两个实体: @Entity @Table(name = "PERSONS") public class Persons { ... @OneToMany(mappedBy = "person", cascade = CascadeType.ALL, fetch = FetchType.LAZY) public List<Cards> cards = new ArrayList<Cards>()
@Entity
@Table(name = "PERSONS")
public class Persons {
...
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public List<Cards> cards = new ArrayList<Cards>();
...
}
和个人存储库:
@Repository
@Transactional
public class PersonRepository {
@Autowired
private SessionFactory sessionFactory;
public List<Persons> getAll() {
return getSession().createCriteria(Persons.class).list();
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
}
`
我确实错误地使用了sql查询
我在appcontroller类中配置记录器:
@RequestMapping(value = {"/", "/home"}, method = RequestMethod.GET)
public String homePage(ModelMap model) {
model.addAttribute("greeting", "Welcome to the first page of the project");
List<Persons> personsList = personService.getUsers();
if (Const.DEBUG) {
if (logger.isDebugEnabled()) {
for (Persons persons : personsList) {
logger.debug("Array Card size " + persons.getCards().size() + " for " + persons.getNickname());
for (Cards card : persons.getCards()) {
logger.debug("CardName " + card.getCardName());
}
}
}
}
return "welcome";
}
这意味着用户“vvv”只有一张卡,延迟获取不起作用
班级人事服务:
@Service
@Transactional
public class PersonService {
...
@Autowired
PersonRepository personRepository;
public List<Persons> getUsers() {
List<Persons> personList = new ArrayList<>();
for (Persons person : personRepository.getAll()) {
if (person.getRole().getRoleType().equals("USER"))
personList.add(person);
}
return personList;
}
...
}
@服务
@交易的
公共类人员服务{
...
@自动连线
个人知识库;
公共列表getUsers(){
List personList=新建ArrayList();
for(personperson:personRepository.getAll()){
if(person.getRole().getRoleType().equals(“用户”))
personList.add(person);
}
回归人格;
}
...
}
我哪里搞错了?hibernate在控制台中打印了什么sql查询?需要澄清的是,当getAll()退出时,卡已经被提取了?添加sql查询。是的,有人拿了卡,可能出了什么问题。我认为注释@OneToMany(mappedBy=“person”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)不起作用?Sql查询不连接
卡片表,但它连接城市和滚轴表。所以fetch=FetchType.LAZY
在列表卡上运行。
@RequestMapping(value = {"/", "/home"}, method = RequestMethod.GET)
public String homePage(ModelMap model) {
model.addAttribute("greeting", "Welcome to the first page of the project");
List<Persons> personsList = personService.getUsers();
if (Const.DEBUG) {
if (logger.isDebugEnabled()) {
for (Persons persons : personsList) {
logger.debug("Array Card size " + persons.getCards().size() + " for " + persons.getNickname());
for (Cards card : persons.getCards()) {
logger.debug("CardName " + card.getCardName());
}
}
}
}
return "welcome";
}
[DEBUG] 2017-05-02 08:32:46 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for Alex
[DEBUG] 2017-05-02 08:32:49 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for ui1
[DEBUG] 2017-05-02 08:32:50 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for ui2
[DEBUG] 2017-05-02 08:32:50 com.team.mvc.controller.AppController:homePage:55 - Array Card size 1 for vvv
[DEBUG] 2017-05-02 08:32:51 com.team.mvc.controller.AppController:homePage:57 - CardName null
[DEBUG] 2017-05-02 08:32:53 com.team.mvc.controller.AppController:homePage:55 - Array Card size 1 for Sam
[DEBUG] 2017-05-02 08:32:54 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for Alex
[DEBUG] 2017-05-02 08:32:54 com.team.mvc.controller.AppController:homePage:57 - CardName null
[DEBUG] 2017-05-02 08:32:55 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for Alex
[DEBUG] 2017-05-02 08:32:56 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for ui1
[DEBUG] 2017-05-02 08:32:56 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for ui1
[DEBUG] 2017-05-02 08:32:56 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for 7
[DEBUG] 2017-05-02 08:32:56 com.team.mvc.controller.AppController:homePage:55 - Array Card size 0 for ui2
@Service
@Transactional
public class PersonService {
...
@Autowired
PersonRepository personRepository;
public List<Persons> getUsers() {
List<Persons> personList = new ArrayList<>();
for (Persons person : personRepository.getAll()) {
if (person.getRole().getRoleType().equals("USER"))
personList.add(person);
}
return personList;
}
...
}