錯誤:java
後臺debug正常時 hibernate能夠正常查找web
前臺spring
解決:1在web.xml 加入hibernate 延遲加載的過濾器(springmvc過濾器前)session
<!--hibernate延遲加載 解決--> <filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
2在對應實體類加註解@JsonBackReferencemvc
package com.shiro.pojo; import com.demo.pojo.BaseEntity; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import javax.persistence.Transient; @Entity @Table(name="t_user") public class User extends BaseEntity { private String username; private String password; private List<Role> roleList;//一個用戶具備多個角色 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @JsonBackReference//這裏! @ManyToMany @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},inverseJoinColumns={@JoinColumn(name="role_id")}) public List<Role> getRoleList() { return roleList; } public void setRoleList(List<Role> roleList) { this.roleList = roleList; } @Transient public Set<String> getRolesName(){ List<Role> roles=getRoleList(); Set<String> set=new HashSet<String>(); for (Role role : roles) { set.add(role.getRolename()); } return set; } }
package com.shiro.pojo; import com.demo.pojo.BaseEntity; import com.fasterxml.jackson.annotation.JsonBackReference; import java.util.ArrayList; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; @Entity @Table(name="t_role") public class Role extends BaseEntity { private String rolename; private List<Permission> permissionList;//一個角色對應多個權限 private List<User> userList;//一個角色對應多個用戶 public String getRolename() { return rolename; } public void setRolename(String rolename) { this.rolename = rolename; } @JsonBackReference//這裏! @OneToMany(mappedBy="role") public List<Permission> getPermissionList() { return permissionList; } public void setPermissionList(List<Permission> permissionList) { this.permissionList = permissionList; } @ManyToMany @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")}) public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } @Transient public List<String> getPermissionsName(){ List<String> list=new ArrayList<String>(); List<Permission> perlist=getPermissionList(); for (Permission per : perlist) { list.add(per.getPermissionname()); } return list; } }
遺留問題 這個過濾器的做用 註解的做用app