如何解决在不触发休眠延迟加载的情况下访问哈希码
我在使用 Hibernate 时遇到了一些问题,我希望有人能指点一下。我有两个实体,产品和制造商,它们具有多对多关系。在产品方面,有一组制造商定义为:
@ContainedIn
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "products_to_manufacturers",inverseJoinColumns = {
@JoinColumn(name = "manufacturer_id",referencedColumnName = "id") },joinColumns = {
@JoinColumn(name = "product_id",referencedColumnName = "id") })
@OrderBy("name")
@AuditJoinTable(inverseJoinColumns = { @JoinColumn(name = "manufacturer_id",referencedColumnName = "id") })
protected Set<Manufacturer> manufacturers;
public Set<Manufacturer> getManufacturers()
{
if (manufacturers == null)
{
manufacturers = new HashSet<Manufacturer>();
}
return manufacturers;
}
public void setManufacturers(Set<Manufacturer> manufacturers)
{
getManufacturers().clear();
if (manufacturers != null)
{
getManufacturers().addAll(manufacturers);
}
}
private Product updateProductMfgs(Product product,Set<BigInteger> mfgIds)
{
Set<Manufacturer> mfgs = new HashSet<Manufacturer>();
if (mfgIds != null)
{
for (BigInteger mfgId : mfgIds)
{
Manufacturer mfg = entityManager.getReference(Manufacturer.class,mfgId);
if (mfg != null)
{
mfgs.add(mfg);
}
}
}
product.setManufacturers(mfgs);
return product;
}
我需要能够在不触发制造商延迟加载的情况下调用 setManufacturers()。理论上这应该可行,但是一旦 HashSet 尝试访问 Manufacturer 的 hashCode() 方法,它就会出于某种原因启动延迟加载。我查看了一些关于如何实现 hashCode 和 equals 的文章(例如这篇: https://vladmihalcea.com/the-best-way-to-implement-equals-hashcode-and-tostring-with-jpa-and-hibernate/ ),但我发现的信息都没有相关性。延迟加载仅通过调用 hashCode() 触发;它从未真正实现。
有没有人知道我可以做些什么来解决这个问题?是否有可以修改延迟加载行为的休眠设置或配置选项?
更新: 这是任何想要它的人的堆栈跟踪
Caused by: org.hibernate.LazyInitializationException: Could not initialize proxy [com.tura.common.domain.Manufacturer#2] - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:169)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:309)
at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyInterceptor.java:45)
at org.hibernate.proxy.ProxyConfiguration$Interceptordispatcher.intercept(ProxyConfiguration.java:95)
at com.tura.common.domain.Manufacturer$HibernateProxy$cdTL8c5F.hashCode(UnkNown Source)
at java.util.HashMap.hash(HashMap.java:338)
at java.util.HashMap.put(HashMap.java:611)
at java.util.HashSet.add(HashSet.java:219)
at com.tura.product.service.test.Test.testCreateNewFrame(Test.java:1793)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。