gpt4 book ai didi

database - Hibernate 不保存也不抛出异常?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:29 24 4
gpt4 key购买 nike

我已经坚持这个问题几个星期了,我不知道哪里出了问题。我很绝望,因为我已经浪费了很多时间

我使用下面描述的数据模型 (MySQL)。我通过逆向工程(Eclipse/JBoss 工具)创建了 hbm.xml 和 java 类(参见下面的示例)。

当我尝试保存推文、文字或事件时,我可以在日志消息中看到生成了 pk 值并且参数已正确绑定(bind),但没有任何内容写入数据库。 (查看帖子最后的日志消息)

但最奇怪的是,我保存到event_has_words表中的对象被完美地存储了(用word和event表生成的id)!?!?!最重要的是不会抛出异常!?!

有什么想法吗?我要疯了!

最好的问候,

约翰

这是一个不起作用的映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="de.brotkasting.buki.cep.data.hibernate.entities.Event" table="event" catalog="cep1">
<id name="pkEventsId" type="java.lang.Integer">
<column name="PK_Events_Id" />
<generator class="identity" />
</id>
<many-to-one name="sourceSystems" class="de.brotkasting.buki.cep.data.hibernate.entities.SourceSystems" fetch="select">
<column name="SourceSystems_PK_SourceSystems_Id" not-null="true" />
</many-to-one>
<many-to-one name="tweets" class="de.brotkasting.buki.cep.data.hibernate.entities.Tweets" fetch="select">
<column name="Tweets_pk_tweet_id" not-null="true" />
</many-to-one>
<property name="systemTimeStamp" type="timestamp">
<column name="System_Time_Stamp" length="19" not-null="true" />
</property>
</class>
</hibernate-mapping>

和相应的类:

    package de.brotkasting.buki.cep.data.hibernate.entities;

// Generated 28.04.2009 21:24:54 by Hibernate Tools 3.2.4.GA

@Entity
@Table(name = "event", catalog = "cep1")
public class Event implements java.io.Serializable {

/**
*
*/
private static final long serialVersionUID = 3530010885697280401L;
private Integer pkEventsId;
private SourceSystems sourceSystems;
private Tweets tweets;
private Date systemTimeStamp;

public Event() {
}

public Event(SourceSystems sourceSystems, Tweets tweets,
Date systemTimeStamp) {
this.sourceSystems = sourceSystems;
this.tweets = tweets;
this.systemTimeStamp = systemTimeStamp;
}

@Id
@Column(name = "PK_Events_Id", unique = true, nullable = false)
public Integer getPkEventsId() {
return this.pkEventsId;
}

public void setPkEventsId(Integer pkEventsId) {
this.pkEventsId = pkEventsId;
}

@JoinColumn(name = "SourceSystems_PK_SourceSystems_Id", nullable = false)
public SourceSystems getSourceSystems() {
return this.sourceSystems;
}

public void setSourceSystems(SourceSystems sourceSystems) {
this.sourceSystems = sourceSystems;
}

@JoinColumn(name = "Tweets_pk_tweet_id", nullable = false)
public Tweets getTweets() {
return this.tweets;
}

public void setTweets(Tweets tweets) {
this.tweets = tweets;
}

//@Temporal(TemporalType.TIMESTAMP)
@Column(name = "System_Time_Stamp", nullable = false, length = 19)
public Date getSystemTimeStamp() {
return this.systemTimeStamp;
}

public void setSystemTimeStamp(Date systemTimeStamp) {
this.systemTimeStamp = systemTimeStamp;
}

}

类继续存在

public class TweetPersistence extends HibernateBase {

private static int batchCounter = 0;

private static void store(Object object) throws HibernateException
{
try {
if(session == null)
{
session = sessionFactory.openSession();
}
if(!session.isOpen())
{
session = sessionFactory.openSession();
}
session.save(object);
LoggingConfigurator.getInstance().info("Objekt:" +object);
//flush cache every 20 saved entities
//if(batchCounter%20 == 0)
//{
session.flush();
session.clear();
//}
//increment batchCounter
batchCounter++;
} catch (HibernateException e) {
e.printStackTrace(System.out);
}
}

public static void storeTweet(Tweets tweet) {

try {

if (tweet != null) {
store(tweet);
}
} catch (HibernateException e) {
e.printStackTrace(System.out);
}
}
}

并且在日志中我可以看到正确生成了 id


- 生成的标识符:component[eventsPkEventsId,wordsPkWordListId,position]{position=128, wordsPkWordListId=128, eventsPkEventsId=56}

最佳答案

来自Hibernate reference manual :

"Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data"

我建议您将所有持久性操作包含在一个事务中。例如。

Session session = factory.openSession();
Transaction tx;
try {
tx = session.beginTransaction();
session.save(object);
tx.commit();
}
catch (Exception e) {
if (tx != null) tx.rollback();
throw e;
}
finally {
session.close();
}

关于database - Hibernate 不保存也不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/799889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com