我有两个类,“article”包含对“surchargegroup”的@manytoone引用,该“surchargegroup”指定了该文章的附加费。
@Entity
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(doNotUseGetters = true)
@Audited
public final class Article {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Getter(onMethod_ = {@Key(PermissionKey.ARTICLE_ID_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.ARTICLE_ID_WRITE)})
private int id;
@JoinColumn(nullable = false)
@ManyToOne
@Getter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_WRITE)})
private SurchargeGroup surchargeGroup;
}
另一个类“SurchargeGroup”包含一个父对象引用,它可以将附加费继承到“SurchargeGroup”,如果没有设置,则任何父对象都不提供附加费的情况是不可能的。
@Table
@Entity
@EqualsAndHashCode(doNotUseGetters = true)
@Audited
public class SurchargeGroup implements Serializable, Cloneable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
@Getter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_ID_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_ID_WRITE)})
private int id;
@Column
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SURCHARGE_WRITE)})
private Double surcharge;
@Column
@Getter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_NAME_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_NAME_WRITE)})
private String name;
@JoinColumn
@ManyToOne(fetch = FetchType.EAGER)
@Getter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_WRITE)})
private SurchargeGroup parent;
public double getSurcharge() {
if (surcharge == null) {
return parent == null
? supplier == null
? Setting.SURCHARGE_DEFAULT.getDoubleValue()
: supplier.getDefaultSurcharge()
: parent.getSurcharge();
} else return surcharge;
}
@JoinColumn
@ManyToOne
@Getter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_READ)})
@Setter(onMethod_ = {@Key(PermissionKey.SURCHARGE_TABLE_SUPPLIER_WRITE)})
private Supplier supplier;
}
我现在的问题是,如果我调用“getSurcharge()”方法,我会得到这个异常,我无法向自己解释,因为我将附加费组标记为fetch eager
Exception in thread "AWT-EventQueue-0" org.hibernate.LazyInitializationException: could not initialize proxy [kernbeisser.DBEntities.SurchargeGroup#1046] - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:172)
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 kernbeisser.DBEntities.SurchargeGroup$HibernateProxy$cdTAuBkS.getSurcharge(Unknown Source)
我问自己这是不是由@Audited注释引起的?有什么想法吗?多谢!
注意:@Key注释对此场景没有影响。
Hibernate需要在某个时刻停止急切地获取关联,否则它将需要无限次地加入SurchargeGroup
实体(因为它引用自己)。
可以使用hibernate.max_fetch_deptth
属性在应用程序范围内控制这些提取的深度。
另一种方法是使用Crieteria关联,但关联只能与和一起工作! 请在这里帮帮我。
配置类的应用程序侦听器时出现错误 这实际上是我的错误 ** 严重:配置类org的应用程序侦听器时出错。springframework。网状物上下文ContextLoaderListener java。lang.NoClassDefFoundError:javax/servlet/ServletContextListener **在爪哇。lang.ClassLoader。java上的findBoot
问题内容: 这些查询翻译器之间有什么区别(对于Hibernate用户而言,我的意思是不同)。互联网上的一些博客说基于ANTLR的翻译器更快。但是我认为,如果其中一个明显更好,那么Hibernate开发人员将删除另一个。那么..有什么区别?为什么我们都拥有它们?在什么情况下我应该选择第一还是第二?在什么情况下我不应该选择其中一位翻译? 问题答案: 这是 内部休眠配置 ; 它将在升级到版本3时实现 。
我有一个应用程序,它使用hibernate使用注释创建初始数据库。 有人这样做过吗,如果有请告诉我怎么做。或者至少是另一种选择。是否所有的ORM更新都必须用sql脚本手动创建?
我必须在
问题内容: 休眠是否对选择查询有支持? 有没有一种方法可以为该查询创建休眠条件? 问题答案: 由于这里存在所有“怀疑”和“猜测”,因此当我偶然发现此问题时,我肯定会回答: 否,Hibernate不支持DISTINCT ON查询。 在Hibernate 4.3.9-final下测试