我有一个严重的hibernate问题.我遵循各种书籍和在线教程,但我得到了与HibernateUtil.java线明显抛出相同的异常"ExceptionInInitializerError"
SessionFactory sf = cfg.configure().buildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
我的Tomcat日志说明如下:
Caused by: java.lang.ExceptionInInitializerError
at de.marcelstuht.nerven2.server.HibernateUtil.buildSessionFactory(HibernateUtil.java:23)
at de.marcelstuht.nerven2.server.HibernateUtil.<clinit>(HibernateUtil.java:8)
at de.marcelstuht.nerven2.shared.model.Account.<init>(Account.java:52)
at de.marcelstuht.nerven2.server.GreetingServiceImpl.loginServer(GreetingServiceImpl.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
... 21 more
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:180)
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:131)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:345)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
at de.marcelstuht.nerven2.server.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
... 29 more
Caused by: org.hibernate.InstantiationException: could not instantiate test objectde.marcelstuht.nerven2.shared.model.Account
at org.hibernate.engine.internal.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:49)
at org.hibernate.engine.internal.UnsavedValueFactory.getUnsavedIdentifierValue(UnsavedValueFactory.java:68)
at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:75)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:143)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:498)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:142)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用注释的一对一关系.
这是代码.
package test.hibernate;
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@GeneratedValue
@Column(name="EMP_ID")
private Long empID;
@Column(name="fName")
private String fName;
@Column(name="lName")
private String lName;
@OneToOne(mappedBy="employee", cascade=CascadeType.ALL)
private Address address;
public Employee(/* Long empID, */String fName, String lName) {
super();
// this.empID = empID;
this.fName = fName;
this.lName = lName;
}
public Employee() {
super();
}
public Long getEmpID() {
return empID;
}
public void setEmpID(Long empID) {
this.empID = empID;
}
public String getfName() {
return fName;
}
public void …Run Code Online (Sandbox Code Playgroud) 我的hibernate模型出现了这个错误,我无法弄清楚是什么问题.
Tag.java:
@Entity
@Table(name = "tag")
public class Tag implements java.io.Serializable {
private Integer idTag;
private String name;
private Set<Question> questions = new HashSet<Question>(0);
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idtag", unique = true, nullable = false)
public Integer getIdTag() {
return this.idTag;
}
public void setIdTag(Integer idtag) {
this.idTag = idtag;
}
[...]
@OneToMany(fetch = FetchType.LAZY, mappedBy = "tag")
public Set<Question> getQuestions() {
return this.questions;
}
public void setQuestions(Set<Question> questions) {
this.questions = questions;
}
}
Run Code Online (Sandbox Code Playgroud)
Question.java:
@Entity
@Table(name …Run Code Online (Sandbox Code Playgroud) 我有一个由Hibernate映射到数据库目录"Active"中的数据库表的Person实体.经过一段时间后,"Active"目录中此数据库表中的记录将归档/移动到数据库目录"历史记录"中表的精确副本.我需要从活动目录和历史目录中检索.有没有更好的方法来使用Hibernate注释对此进行建模,而不是创建一个2类扩展的抽象类.
这就是我现在拥有的.
@MappedSuperclass
public abstract class Person {
@Id
private Integer id;
private String name;
}
@Entity
@Table(name="Person", catalog="Active")
public class PersonActive extends Person {
}
@Entity
@Table(name="Person", catalog="History")
public class PersonHistory extends Person {
}
Run Code Online (Sandbox Code Playgroud) 我有以下带注释的Hibernate实体类:
@Entity
public class Cat {
@Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) @Id
private Long id;
@OneToMany(mappedBy = "cat", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Kitten> kittens = new HashSet<Kitten>();
public void setId(Long id) { this.id = id; }
public Long getId() { return id; }
public void setKittens(Set<Kitten> kittens) { this.kittens = kittens; }
public Set<Kitten> getKittens() { return kittens; }
}
@Entity
public class Kitten {
@Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) @Id
private Long id;
@ManyToOne(cascade …Run Code Online (Sandbox Code Playgroud) 我正在尝试定义一个CompositeUserType来处理我的JPA/Hibernate应用程序中的特定类型.我有一个名为ApplicationMessageType的CompositeUserType,用于处理我的映射.
根据我读过的内容,我应该能够在包含TypeDef的域层次结构中创建一个package-info.java类.我看起来像这样:
@TypeDefs({
@TypeDef(
defaultForType = ApplicationMessage.class,
typeClass = ApplicationMessageType.class
)
})
package mptstp.domain;
import mptstp.domain.messages.ApplicationMessage;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我正在使用DefaultDeType参数到TypeDef这一事实,无论何时我尝试保存或加载ApplicationMessage,都应该调用自定义类型代码.
我已经在ApplicationMessageType类中的每个方法上设置了断点,并且没有一个 被调用.
有谁知道我哪里出错了?代码编译,但似乎从未调用TypeDef注释来注册ApplicationMessageType.
任何指针将不胜感激......
谢谢
我正在尝试使用仅带注释的Hibernate 4和一个hibernate.cfg.xml文件.我已经制作了自己的注释,并使用反射将其添加到配置中.我能够以这种方式使用Hibernate 4,但我的配置是使用不推荐的方法构建的.
final Configuration configuration = new Configuration();
final Reflections reflections = new Reflections(Item.class.getPackage().getName());
final Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Entity.class);
for (final Class<?> clazz : classes) {
configuration.addAnnotatedClass(clazz);
}
return configuration.configure().buildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
(不推荐的代码:) buildSessionFactory();.
即使是hibernate 4文档也显示以这种方式构建配置.
如果我尝试使用新方法(buildSessionFactory(ServiceRegistry)我没有得到相同的结果,似乎有很多不必要的代码完全按照不推荐使用的方法做的那样.但是,我不想继续使用这种风格,因为我不喜欢使用已弃用的代码.
我的问题是:如何以上述方式从配置文件中正确配置Hibernate 4?我似乎只是造成错误并面临不必要的困难.
java hibernate hibernate.cfg.xml hibernate-annotations hibernate-4.x
我在一些旧代码中找到了奇怪的东西(至少对我而言).
注释的字段@ManyToOne也带有注释@BatchSize.
我一直认为@BatchSize注释只会影响在类级别或集合(@OneToMany)上进行注释,并影响迭代时的预取.
但是,也许我错了,并标注@ManyToOne与@BatchSize影响的东西.我在文档中找不到答案.
注释是否@ManyToOne与@BatchSize有感觉?
我正在使用Spring(Boot)构建REST Web服务,并尝试使用hibernate作为orm mapper而不使用任何xml配置.
我基本上可以使用它,但我遇到了配置问题.我实例LocalContainerEntityManagerFactoryBean作为@Bean一个@Configuration文件.
我hibernate.ejb.naming_strategy在下面的例子中设置 - >这似乎适用于创建表,如果它们不存在(列名是像我的@Entity类中的camelCase)但是当执行查询时,hibernate"忘记"关于这个命名配置和尝试使用另一种命名策略与under_score_attributes - >显然这些查询失败.我需要设置其他任何属性吗?
或者另一种配置属性的方法,最好不要添加cfg.xml或者persistence.xml?
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
Properties props = new Properties();
props.put("hibernate.hbm2ddl.auto", "create");
props.put("hibernate.ejb.naming_strategy","org.hibernate.cfg.DefaultNamingStrategy");
lef.setJpaProperties(props);
lef.afterPropertiesSet();
Run Code Online (Sandbox Code Playgroud) 我试图禁用在我的双向关联上生成的外键约束.我已经设法为我的所有单向关联做了这个,但由于某种原因它在这里不起作用.
我确实知道最近在Hibernate 5.x中修复的ContraintMode.NO_CONSTRAINT的错误,我正在运行最新的Hibernate 5.2.6.
我的注释目前看起来像这样:
class Parent {
@OneToMany(mappedBy="parent", cascade=CascadeType.ALL, orphanRemoval=true)
@OrderColumn(name="childIndex")
public List<Child> getChildren() {
return children;
}
}
class Child {
@ManyToOne(optional=false)
@JoinColumn(name="parent", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
public Parent getParent() {
return parent;
}
}
Run Code Online (Sandbox Code Playgroud)
但是尽管有NO_CONSTRAINT,Hibernate仍然在child.parent - > parent.id上创建外键约束.
是否需要做一些额外的事情来抑制双向情况下的外键?
谢谢!
hibernate ×10
java ×6
annotations ×1
foreign-keys ×1
inheritance ×1
jpa ×1
many-to-one ×1
mysql ×1
orm ×1
spring ×1
spring-boot ×1
typedef ×1