我正在使用DB2数据库和hibernate框架。有两个表,如Word和Litter,它们的关系是一对多。
>
架构A:
Table Word: ID,
IDLIT -> references to ID of Litter table
Name
Table Litter ID,
Short_Name,
Long_Name.
Session session = HibernateUtility.getSessionFactory().openSession();
session.beginTransaction();
Word word = new Word();
Word word1 =new Word();
Litter litter = new Litter();
litter.setFullname("bla bla");
word.setLitter(litter);
word1.setLitter(litter); //Here I have to handle one to many relationship
Set Words =new HashSet();
Words.add(word);
Words.add(word1);
litter.setWords(words);
session.save(litter);
session.save(word);
session.save(word1);
session.getTransaction().commit();
session.close();
但是这段代码给出了一个异常:JDBCExceptionReporter logExceptions是我正在使用的方法吗?
Stack trace------------------ INFO: schema update complete Hibernate: select max(ID) from LITTER сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: -204, SQLState: 42704 сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=BIMASH.LITTER, DRIVER=3.64.104 сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: -204, SQLState: 42704 сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=BIMASH.LITTER, DRIVER=3.64.104 сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: -727, SQLState: 56098 сен 25, 2012 7:33:42 PM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-204;42704;BIMASH.LITTER, DRIVER=3.64.104 Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:107) at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:44) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519) at Main.main(Main.java:73)
可以使用映射文件中
元素的schema
属性定义映射类所属的架构。注意,这将覆盖常规
的schema
属性中的设置。
<!-- A is set to be the default schema -->
<hibernate-mapping schema="A">
<class name="mypackage.Word" table="WORD" >
....
</class>
<!-- Overriding the schema definition for this class -->
<class name="mypackage.Litter" table="LITTER" schema="B">
....
</class>
</hibernate-mapping>
下面的Hibernate参考章节可能值得一读:第5章。基本的O/R映射,特别是关于
和
元素的部分。
看到堆栈跟踪,类中似乎正在使用
。如果是这样(select max(ID)from litter
查询似乎是这样),您还必须在
中指定模式,以便发出的查询转换为select max(ID)from b.litter
。您可以在
中使用名为架构
的来实现此目的:
<generator class="increment">
<param name="schema">B</param>
</generator>
有关更多详细信息,请参阅这个几乎重复的问题:使用增量和Oracle模式的hibernate:ID生成器
问题内容: 我有以下问题,当试图在数据库中插入对象时,Hibernate卡住,没有返回错误,对象没有正确保存。 调试它,我发现它挂在 我正在使用PostgreSQL作为数据库。 我的配置文件: SELECT部分起作用。 我不确定我缺少什么。同样使用本地SQL插入命令,它也可以工作。 问题答案: 我没看到你这么忙 但最可取的是
问题内容: 我正在使用Hibernate / Spring应用程序来管理一些电影。 班级电影与班级流派有着多对多的关系。这两个类都使用GeneratedValue注释生成了ID。 使用@Cascade(CascadeType.SAVE_UPDATE)通过电影对象保存了流派。我对流派的type属性(它的名称;例如“ Fantasy”)设置了唯一的约束。 我现在想做的是让Hibernate检查是否已经
我有一个实体CandidateTransaction和CandidateTransactionRepository扩展了CrudRepository 我正在使用CrudRepository的save方法来保存所述实体的对象。当实体没有行时,它将创建一个自动生成的键并将其插入ID列,而不需要Java端的干预。 而且,由于CrudRepository的save()方法检查实体是否是新的,如果是新的,它
问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。但是,由于其中一个数据库包含公共实体,因此应该共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2,“
问题内容: 这是我的第一篇文章,因此,如果我错过任何内容,请耐心等待:)。 我使用GoJS的go- debug.js库在浏览器上绘制了一些图表,但我在保存选项上遇到了问题。该图产生一个JavaScript对象,您可以通过此命令 myDiagram.model.toJson() 将其转换为Json并将其传递给数据库。我想按保存按钮将使用 Ajax 方法的图表保存到 PhP ,然后保存到 mySQL
我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以在数据库中再创建3列(category\u 1、category\u 2、category\u 3)对我来说并不算多。 我想象在插入的时候,不是保存在3个不同的列中,而是将数组保存到一个“categories”列中。 我的问题是,在获得信息的那一刻。如果我这样做了,比如说搜索每个有一个特定类别的记录,那么什