- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
后端 Spring MVC 和 Spring-data,spring-security 。前端 Angularjs。我使用的是 spring 3.1;Jackson 1.8; JPa 2.1 ands mysql.基本问题同问多次。我有一个带有两个 POJO 站点和 typeSite 的简单程序,其中一个 typeSite 可以有多个站点。但我收到以下错误:
org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: failed to lazily initialize a collection of role: TypeSites.sitees, could not initialize proxy - no Session (through reference chain: vo.TypeSitesListVO["typesites"]->java.util.UnmodifiableRandomAccessList[0]-model.TypeSites["sitees"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: model.TypeSites.sitees, could not initialize proxy - no Session (through reference chain:vo.TypeSitesListVO["typesites"]->java.util.UnmodifiableRandomAccessList[0]->model.TypeSites["sitees"])
Caused by: com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: model.TypeSites.sitees, could not initialize proxy - no Session (through reference chain: vo.TypeSitesListVO["typesites"]->java.util.UnmodifiableRandomAccessList[0]->model.TypeSites["sitees"])
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Sites implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int id;
private TypeSites siteesTypeSite;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
//@ManyToOne(fetch = FetchType.LAZY)
//@JoinColumn(name ="idTypeSite")
//@JsonIgnore
@JsonBackReference("site-typeSite")
@ManyToOne
@JoinColumn(name = "idTypeSite", foreignKey = @ForeignKey(name = "fk_site_typeSite"))
public TypeSites getSiteesTypeSite() {
return siteesTypeSite;
}
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="idTypeSite")
public class TypeSites implements java.io.Serializable {
private int idTypeSite;
private Set<Sites> sitees= new HashSet<Sites>(0);
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getIdTypeSite() {
return idTypeSite;
}
//@JsonSerialize(using = CustomListSerializer.class)
//@JsonView(Views.Internal.class)
//@JsonIgnore
@JsonManagedReference("site-typeSite")
@OneToMany(mappedBy = "siteesTypeSite", cascade = CascadeType.ALL,fetch = FetchType.LAZY)
public Set<Sites> getSitees() {
return sitees;
}
public class TypeSitesListVO {
private int pagesCount;
private long totalTypeSite;
private String actionMessage;
private String searchMessage;
private List<TypeSites> typesites;
//setters/gtters}
public class SitesListVO {
private int pagesCount;
private long totalSites;
private String actionMessage;
private String searchMessage;
private List<Sites> sites = new ArrayList<Sites>();
//setters/gtters}
public interface SitesRepository extends PagingAndSortingRepository<Sites, Integer> {
//@Query("SELECT s FROM Sites s TypeSites ts JOIN FETCH s.siteesTypeSite WHERE s.id =ts.idTypeSite ")
//@EntityGraph(value = "sites.type", type = EntityGraphType.LOAD)
Page<Sites> findBycodeGSMLike(Pageable pageable, String codeGSM);
//Page<Sites> findBycodeGSMLike(Pageable pageable, List<String> codeGSM);
}
@Service
@Transactional
public class SitesService {
@Autowired
private SitesRepository siteRepository;
@Transactional(readOnly = true)
public SitesListVO findAll(int page, int maxResults) {
Page<Sites> result = executeQueryFindAll(page, maxResults);
if(shouldExecuteSameQueryInLastPage(page, result)){
int lastPage = result.getTotalPages() - 1;
// for (Sites e: result){
// Hibernate.initialize(e.getSiteesTypeSite());
// }
result = executeQueryFindAll(lastPage, maxResults);
}
return buildResult(result);
}
public void save(Sites site) {
siteRepository.save(site);
}
@Transactional(readOnly = true)
public SitesListVO findBycodeGSMLike(int page, int maxResults, String codeGSM) {
Page<Sites> result = executeQueryFindByName(page, maxResults, codeGSM);
if(shouldExecuteSameQueryInLastPage(page, result)){
int lastPage = result.getTotalPages() - 1;
// for (Sites e: result){
// Hibernate.initialize(e.getSiteesTypeSite());
// }
result = executeQueryFindByName(lastPage, maxResults, codeGSM);
}
return buildResult(result);
}
private boolean shouldExecuteSameQueryInLastPage(int page, Page<Sites> result) {
return isUserAfterOrOnLastPage(page, result) && hasDataInDataBase(result);
}
private Page<Sites> executeQueryFindAll(int page, int maxResults) {
final PageRequest pageRequest = new PageRequest(page, maxResults, sortBycodeGSMASC());
// Page<Sites> SitesList = siteRepository.findAll(pageRequest);
// for (Sites e: SitesList){
// Hibernate.initialize(e.getSiteesTypeSite());
// }
// return SitesList;
return siteRepository.findAll(pageRequest);
}
private Sort sortBycodeGSMASC() {
return new Sort(Sort.Direction.ASC, "codeGSM");
}
private SitesListVO buildResult(Page<Sites> result) {
return new SitesListVO(result.getTotalPages(), result.getTotalElements(), result.getContent());
}
private Page<Sites> executeQueryFindByName(int page, int maxResults, String codeGSM) {
final PageRequest pageRequest = new PageRequest(page, maxResults, sortBycodeGSMASC());
// Page<Sites> SitesList = siteRepository.findBycodeGSMLike(pageRequest, codeGSM);
// for (Sites e: SitesList){
// Hibernate.initialize(e.getSiteesTypeSite());
// }
// return SitesList;
return siteRepository.findBycodeGSMLike(pageRequest, codeGSM);
}
private boolean isUserAfterOrOnLastPage(int page, Page<Sites> result) {
return page >= result.getTotalPages() - 1;
}
private boolean hasDataInDataBase(Page<Sites> result) {
return result.getTotalElements() > 0;
}
}
@Controller
@RequestMapping(value = "/protected/sites")
public class SitesController {
private static final String DEFAULT_PAGE_DISPLAYED_TO_USER = "0";
@Autowired
private SitesService siteService;
@Autowired
private MessageSource messageSource;
@Value("5")
private int maxResults;
@RequestMapping(method = RequestMethod.GET)
public ModelAndView welcome() {
return new ModelAndView("sitesList");
}
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<?> listAll(@RequestParam int page, Locale locale) {
return createListAllResponse(page, locale);
}
@RequestMapping(method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<?> create(@ModelAttribute("site") Sites site,
@RequestParam(required = false) String searchFor,
@RequestParam(required = false,
defaultValue = DEFAULT_PAGE_DISPLAYED_TO_USER) int page,
Locale locale) {
siteService.save(site);
if (isSearchActivated(searchFor)) {
return search(searchFor, page, locale, "message.create.success");
}
return createListAllResponse(page, locale, "message.create.success");
}
private SitesListVO listAll(int page) {
return siteService.findAll(page, maxResults);
}
private ResponseEntity<SitesListVO> returnListToUser(SitesListVO siteList) {
return new ResponseEntity<SitesListVO>(siteList, HttpStatus.OK);
}
private ResponseEntity<?> createListAllResponse(int page, Locale locale) {
SitesListVO siteListVO = listAll(page);
return createListAllResponse(page, locale, null);
}
private ResponseEntity<?> createListAllResponse(int page, Locale locale, String messageKey) {
SitesListVO siteListVO = listAll(page);
addActionMessageToVO(siteListVO, locale, messageKey, null);
return returnListToUser(siteListVO);
}
private SitesListVO addActionMessageToVO(SitesListVO siteListVO, Locale locale, String actionMessageKey, Object[] args) {
if (StringUtils.isEmpty(actionMessageKey)) {
return siteListVO;
}
siteListVO.setActionMessage(messageSource.getMessage(actionMessageKey, args, null, locale));
return siteListVO;
}
private SitesListVO addSearchMessageToVO(SitesListVO siteListVO, Locale locale, String actionMessageKey, Object[] args) {
if (StringUtils.isEmpty(actionMessageKey)) {
return siteListVO;
}
siteListVO.setSearchMessage(messageSource.getMessage(actionMessageKey, args, null, locale));
return siteListVO;
}
private boolean isSearchActivated(String searchFor) {
//return !CollectionUtils.isEmpty(searchFor);
return !StringUtils.isEmpty(searchFor);
}
}
$scope.getContactList = function () {
var url = $scope.url;
$scope.lastAction = 'list';
$scope.startDialogAjaxRequest();
var config = {params: {page: $scope.pageToGet}};
$http.get(url, config)
.success(function (data) {
// console.log(data);
console.debug(data);
$scope.finishAjaxCallOnSuccess(data, null, false);
})
.error(function () {
$scope.state = 'error';
$scope.displayCreateContactButton = false;
});
}
$scope.populateTable = function (data) {
if (data.pagesCount > 0) {
$scope.state = 'list';
$scope.page = {source: data.sites, currentPage: $scope.pageToGet, pagesCount: data.pagesCount, totalContacts : data.totalContacts};
if($scope.page.pagesCount <= $scope.page.currentPage){
$scope.pageToGet = $scope.page.pagesCount - 1;
$scope.page.currentPage = $scope.page.pagesCount - 1;
}
$scope.displayCreateContactButton = true;
$scope.displaySearchButton = true;
} else {
$scope.state = 'noresult';
$scope.displayCreateContactButton = true;
if(!$scope.searchFor){
$scope.displaySearchButton = false;
}
}
if (data.actionMessage || data.searchMessage) {
$scope.displayMessageToUser = $scope.lastAction != 'search';
$scope.page.actionMessage = data.actionMessage;
$scope.page.searchMessage = data.searchMessage;
} else {
$scope.displayMessageToUser = false;
}
}
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="filter.HibernateAwareObjectMapper" />
</property>
</bean>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
</list>
</property>
</bean>
private static final long serialVersionUID = 1L;
public HibernateAwareObjectMapper() {
registerModule(new Hibernate4Module());
}
}
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>2.4.0</version>
</dependency>
最佳答案
我通过添加这个注释来解决这个问题 @LazyCollection(LazyCollectionOption.FALSE)
//@JsonSerialize(using = CustomListSerializer.class)
//@JsonView(Views.Internal.class)
//@JsonIgnore
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "siteesTypeSite", cascade = CascadeType.ALL,fetch = FetchType.LAZY)
public Set<Sites> getSitees() {
return sitees;
}
关于angularjs - Jackson 混淆了双向一对多关系 : failed to lazily initialize collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465748/
“Fail Early”是什么意思,在什么情况下这种方法最有用,你什么时候会避免这种方法? 最佳答案 本质上,快速失败 (又名 尽早失败 )是对您的软件进行编码,使得 当出现问题时,软件会尽快并尽可能
/* * 115200. Connect GPIO 0 of your ESP8266 to VCC and reset the board */ #include #include #inc
安装并注册 gitlab-runner 后,当我运行时 gitlab-runner start我收到此错误消息。这是什么原因? Runtime platform
我一直在尝试Windows Server 2016 TP5上的Windows容器。突然我在运行带有端口映射选项-p 80:80的容器时开始出错 c:\>docker run -it -p 80:80
我一直在关注 Hyperledger Fabric Multi-Org setup 的教程,我能够成功地做到这一点。现在我想根据我想要的组织名称对其进行自定义,并且在尝试连接网络时遇到以下错误。希望有
所以我不知道为什么这个测试失败了。当我运行 repl 中的语句时,一切似乎都正常工作,但 fiveam 测试失败。 以下要点中有一个测试用例:https://gist.github.com/Puerc
我安装了 Android Studio 1.2.1.1、Gradle 版本 2.2.1 和 Android 插件版本 1.2.3。我试图创建一个简单的 hello world 项目,它给了我一个构建失
我正在尝试设置一个简单的 WebTestCase,它使用 Symfony 4(和 "phpunit/phpunit": "^6.5")。但是,测试失败: Failed to start the ses
我已经使用 git clone 在本地克隆了一个包含 Vue 项目的 git 存储库. 然后我跑了npm install安装依赖项并获得 node_modules文件夹。 正在运行 npm run s
我有:http://windows.github.com/ 我当前的项目有大约 20k 个文件,大约 150MB(并且不说它有多慢而且我现在什么也做不了)它甚至不允许我提交!我收到此错误:提交失败:无
我正在使用 RxAndroidBle 库开发一个应用程序,该库大约每 30 秒定期执行 BLE 扫描,每分钟左右执行一些 BLE 操作。几个小时后,通常在 5 到 24 小时之间,扫描停止工作。每次应
每次我尝试使用 Pycharm 推送 GitHub 中的存储库时,它都会失败。 Push failed: fatal: Authentication failed for 'https://githu
此外,管理内置“管理结构”(如标题中的结构)的 Resque 的最佳实践是什么?我应该用 jedis.del(String key) 或类似的东西清除它们吗? 最佳答案 resque:failed 是
想象这样一种场景,我们想要在对“foo”和“bar”的并发请求成功完成后做一些事情,或者如果其中一个或两个失败则报告错误: $.when($.getJSON('foo'), $.getJSON('ba
这就是我所做的: 我使用的是 Windows XP SP3 我已经安装了 Python 2.7.1。 我下载了instantclient-basic-nt-11.2.0.3.0.zip,解压后放入C:
我已经设置了一个 vfsstream block 设备,我正在尝试对其调用 file_get_contents()。然而,对 vfsStreamWrapper::stream_open 的调用失败,因
我正在尝试在我的 React 应用程序中使用文件上传功能,但遇到了问题。当我尝试上传第一张图片时,它工作得很好。文件资源管理器对话框关闭并显示我的图片。用我的文件资源管理器中的另一张图片覆盖图片也可以
目标:将我的本地 mongodb 数据迁移到 mongodb atlas 集群。 尝试: 1.将本地数据导出为json。 2.导入json到集群。 操作系统:Linuxmint 19.1 Cinnam
我一直在从事一个需要在服务器(托管在 GCE 上)和多个客户端之间进行一些网络连接的项目。我创建了一个 Compute Engine 实例来运行 Python 脚本,如以下视频所示:https://w
我正在尝试使用 sqlx crate 和 Postgres 数据库连接到 Rust 中的数据库。 main.rs: use dotenv; use sqlx::Pool; use sqlx::PgPo
我是一名优秀的程序员,十分优秀!