我是spring的新手,在从一个与其他表有关系的表中获取记录时,会出现这个懒洋洋的初始化错误。我在网上读了很多,但没有找到一个合适的方法。
表1:
@SuppressWarnings("serial")
@Entity
public class Terminal extends BaseEntity {
@Column(length = 100, unique = true)
private String shortName;
@Column
private short number; // short stores up to 32767 value
@Column
private String description;
@OneToMany
@JoinColumn(name = "terminal_id", referencedColumnName = "uuid")
@Cascade({ CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE })
private Set<BusinessHour> businessHour;
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public short getNumber() {
return number;
}
public void setNumber(short number) {
this.number = number;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Set<BusinessHour> getBusinessHour() {
return businessHour;
}
public void setBusinessHour(Set<BusinessHour> businessHour) {
this.businessHour = businessHour;
}
@SuppressWarnings("serial")
@Entity
public class BusinessHour extends BaseEntity {
@Column
private DayOfWeek dayOfWeek;
@Column
private LocalTime startOfOperation;
@Column
private LocalTime endOfOperation;
public DayOfWeek getDayOfWeek() {
return dayOfWeek;
}
}
@Service
public class TerminalServiceImpl implements TerminalService {
@Autowired
TerminalRepository terminalRepository;
Iterable<Terminal> allTerminals = terminalRepository.findAll();
List<Terminal> terminalList = new ArrayList<Terminal>();
for (Terminal terminal : allTerminals) {
terminalList.add(terminal);
}
return terminalList;
}
@Transactional
public interface TerminalRepository extends CrudRepository<Terminal, Long> {
}
private List<Terminal> updateTerminalList() {
List<Terminal> allTerminals = terminalService.fetchAllTerminal();
return allTerminals;
}
public void terminalWrapperRun() {
try {
Payload payload = createTerminalPayload(applicationId);
String json3 = object2Json(payload);
kafkaRESTUtils.sendServerPayload(json3);
} catch (Exception e1) {
e1.printStackTrace();
}
}
public String object2Json(Object dataArray) throws JsonProcessingException {
return mapper.writeValueAsString(dataArray);
}
错误:
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: terminal.model.Terminal.businessHour, could not initialize proxy - no Session (through reference chain:
将获取对象转换为JSON时获取异常。我发现这是由于代理对象返回由于fetch类型lazy(我希望保持原样)。
我认为这个问题与ORM默认情况下延迟加载集合有关。
@OneToMany
@JoinColumn(name = "terminal_id", referencedColumnName = "uuid")
@Cascade({ CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE })
private Set<BusinessHour> businessHour;
@OneTomany注释有一个fetch属性,默认设置为LAZY。
FetchType fetch() default LAZY;
单胞菌参比
在ORM会话中执行JSON生成(我只建议这样做是导致性能问题的第一个选项)。
我有一个应用程序(Spring 4 MVC Hibernate 4 MySQL Maven集成示例使用注释),使用基于注释的配置将Spring与Hibernate集成。 我有这个实体: 和这个: 服务中的这种方法: 在控制器中: 但我得到了这个错误:
我的版本是: SpringFramework 4.2.4.发布 Hibernate4.3.11.final 杰克逊2.7.4 杰克逊类型2.7.1
我有下一个错误: 但是当我试图调用这个方法时,我在在上调用时也会出现同样的异常。我已经检查了事务管理器,它配置正确,事务在这一步中存在。此外,我已经检查了大量与此异常相关的stackoverflow的答案,但没有任何有用的。 它的原因是什么?
错误被抛出在行hibernate.initialize(students)上;或者在下一行,如果没有,在学生集上,标题中有错误。任何帮助(不仅仅是将fetch类型设置为Eager)都将不胜感激。
我尝试用java-hibernate-spring实现一个服务器REST,它返回一个JSON。 我有一个多对多关系图。 我解释得更好,我有一个供应商,有一个配料列表,每种配料都有一个供应商列表。 我创建了这个表: 然后我有配料模型: 然后我有供应商模型: 服务 供应对象 和IdAbstractObject “无法写入JSON:未能懒洋洋地初始化Role:myPackage.Comprigue.Co
你知道为什么jackson不能将这个集合映射到json格式吗?