为什么jpa单向一对多关联thymeleaf还是会堆栈溢出?

user类中有个tag类的set集合;
只从user类维护关系,一对多
@OneToMany
@JoinTable(name="shuo_tag",
inverseJoinColumns=@JoinColumn(name="tag_id"),
joinColumns=@JoinColumn(name="shuo_id"))
privateSettags;
Tag类中没有维护关系
然后我再html中
[[${user}]]这样获取user就会出现以下这种错误
java.lang.StackOverflowError:null
atjava.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1012)~[na:1.8.0_151]
atjava.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)~[na:1.8.0_151]
atjava.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463)~[na:1.8.0_151]
atjava.lang.ClassLoader.loadClass(ClassLoader.java:404)~[na:1.8.0_151]
atjava.lang.ClassLoader.loadClass(ClassLoader.java:411)~[na:1.8.0_151]
atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)~[na:1.8.0_151]
atjava.lang.ClassLoader.loadClass(ClassLoader.java:357)~[na:1.8.0_151]
atorg.thymeleaf.util.JavaScriptUtils.printObject(JavaScriptUtils.java:365)~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]
atorg.thymeleaf.util.JavaScriptUtils.print(JavaScriptUtils.java:184)~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]
atorg.thymeleaf.util.JavaScriptUtils.printArray(JavaScriptUtils.java:227)~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]
繁华开满天机
浏览 722回答 2
2回答

子衿沉夜

@OneToMany有一个属性叫fetch,默认是LAZY:@Target({METHOD,FIELD})@Retention(RUNTIME)public@interfaceOneToMany{/**(Optional)Whethertheassociationshouldbelazilyloadedor*mustbeeagerlyfetched.TheEAGERstrategyisarequirementon*thepersistenceproviderruntimethattheassociatedentities*mustbeeagerlyfetched.TheLAZYstrategyisahinttothe*persistenceproviderruntime.*/FetchTypefetch()defaultLAZY;}所以你要直接用,需要修改为立即加载,可以这么修改:@OneToMany(fetch=FetchType.EAGER)

holdtom

这是thymeleaf2的bug,升级到thymeleaf3可以解决此bug;thymeleaf2的时候是自己处理的json;thymeleaf3使用的jackson,jackson可以通过使用@JsonIgnoreProperties和@JsonIgnore注解解决两个类互相引用的问题
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript