鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ 為什么jpa單向一對多關(guān)聯(lián)thymeleaf還是會堆棧溢出?

為什么jpa單向一對多關(guān)聯(lián)thymeleaf還是會堆棧溢出?

user類中有個tag類的set集合;

只從user類維護關(guān)系,一對多

@OneToMany

@JoinTable(name="shuo_tag",

        inverseJoinColumns=@JoinColumn(name="tag_id"),

        joinColumns=@JoinColumn(name="shuo_id"))

private Set<Tag> tags;


Tag類中沒有維護關(guān)系

然后我再html中

[[${user}]]這樣獲取user就會出現(xiàn)以下這種錯誤

java.lang.StackOverflowError: null

at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1012) ~[na:1.8.0_151]

at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535) ~[na:1.8.0_151]

at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463) ~[na:1.8.0_151]

at java.lang.ClassLoader.loadClass(ClassLoader.java:404) ~[na:1.8.0_151]

at java.lang.ClassLoader.loadClass(ClassLoader.java:411) ~[na:1.8.0_151]

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_151]

at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_151]

at org.thymeleaf.util.JavaScriptUtils.printObject(JavaScriptUtils.java:365) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]

at org.thymeleaf.util.JavaScriptUtils.print(JavaScriptUtils.java:184) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]

at org.thymeleaf.util.JavaScriptUtils.printArray(JavaScriptUtils.java:227) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE]
回答
編輯回答
陌上花

@OneToMany 有一個屬性 叫fetch, 默認是LAZY

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface OneToMany {

    /** (Optional) Whether the association should be lazily loaded or
     * must be eagerly fetched. The EAGER strategy is a requirement on
     * the persistence provider runtime that the associated entities
     * must be eagerly fetched.  The LAZY strategy is a hint to the
     * persistence provider runtime.
     */
    FetchType fetch() default LAZY;

}

所以你要直接用,需要修改為立即加載,可以這么修改:

@OneToMany(fetch = FetchType.EAGER)
2017年9月11日 21:00
編輯回答
大濕胸

這是thymeleaf 2的bug ,升級到thymeleaf 3可以解決此bug;

thymeleaf2的時候是自己處理的json;
thymeleaf3使用的jackson,jackson可以通過使用@JsonIgnoreProperties和@JsonIgnore注解解決 兩個類互相引用的問題

2018年1月28日 08:12