- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个实体 A、B、C。
A有很多B和一个C,B有很多C。我想要双向关系。
我在 Hibernate 中映射了所有这些:
@Entity
@Table(name="TABLE_A")
class A{
@Id
@GeneratedValue
private Integer a_id;
@ManyToOne
C c;
@OneToMany
List<B> bs;
}
@Entity
@Table(name="TABLE_B")
class B{
@Id
@GeneratedValue
private Integer b_id;
@ManyToOne
A a; // inverse
@ManyToOne
C c;
}
@Entity
@Table(name="TABLE_C")
class C{
@Id
@GeneratedValue
private Integer c_id;
@ManyToMany(mappedBy="c")
List<B> b; // inverse
@ManyToMany(mappedBy="c")
List<A> a; //inverse
}
我使用 SchemaUpdate 获取在 MySQL 中生成的表。问题如下:
2012-08-24 14:57:15,437 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_A add index FKCE3C1BF0B8CF4F47 (a_id), add constraint FKCE3C1BF0B8CF4F47 foreign key (a_id) references TABLE_A (a_id)
一个约束被添加到 A 到它自己 - 这可能是由于 C->A 的关系。映射有什么问题?
我创建了一个简单的测试文件:
@Test
public void tests() throws Exception {
Logger l = Logger.getLogger("org.hibernate.tool.hbm2ddl");
l.
setLevel(Level.DEBUG);
//Hibernate.enableCreationDebug();
A a = new A();
SessionFactory sf = configureSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
try{
session.save(a);
tx.commit();
}catch(Exception e){
tx.rollback();
throw e;
}finally{
session.close();
}
session = sf.openSession();
tx = session.beginTransaction();
try{
session.delete(a);
tx.commit();
}catch(Exception e){
tx.rollback();
throw e;
}finally{
session.close();
}
}
private static SessionFactory configureSessionFactory() throws HibernateException {
Configuration configuration = new Configuration();
String DB_USER_NAME = "kiri";
String DB_USER_PWD = "kiri";
String JDBC_CONNECTION_STRING = "jdbc:mysql://localhost/kiri";
configuration
.addAnnotatedClass(HibernateCyclicTest.A.class)
.addAnnotatedClass(HibernateCyclicTest.B.class)
.addAnnotatedClass(HibernateCyclicTest.C.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect")
.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.url", JDBC_CONNECTION_STRING)
.setProperty("hibernate.connection.username", DB_USER_NAME)
.setProperty("hibernate.connection.password", DB_USER_PWD);
// Create or update the schema to match our objects
org.hibernate.tool.hbm2ddl.SchemaUpdate schemaUpdate = new SchemaUpdate(configuration);
schemaUpdate.execute(false,/* update schema */true);
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
这是输出:
2012-08-24 15:03:01,719 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000228: Running hbm2ddl schema update
2012-08-24 15:03:01,719 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000102: Fetching database metadata
2012-08-24 15:03:01,923 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema
2012-08-24 15:03:02,025 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_A
2012-08-24 15:03:02,025 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_A_TABLE_B
2012-08-24 15:03:02,026 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_B
2012-08-24 15:03:02,026 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_C
2012-08-24 15:03:02,027 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_A
2012-08-24 15:03:02,027 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_A_TABLE_B
2012-08-24 15:03:02,028 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_B
2012-08-24 15:03:02,029 [main] INFO java.sql.DatabaseMetaData - HHH000262: Table not found: TABLE_C
2012-08-24 15:03:02,030 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - create table TABLE_A (a_id integer not null auto_increment, c_c_id integer, primary key (a_id)) ENGINE=InnoDB
2012-08-24 15:03:02,051 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - create table TABLE_A_TABLE_B (TABLE_A_a_id integer not null, bs_b_id integer not null, unique (bs_b_id)) ENGINE=InnoDB
2012-08-24 15:03:02,062 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - create table TABLE_B (b_id integer not null auto_increment, a_a_id integer, c_c_id integer, primary key (b_id)) ENGINE=InnoDB
2012-08-24 15:03:02,070 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - create table TABLE_C (c_id integer not null auto_increment, primary key (c_id)) ENGINE=InnoDB
2012-08-24 15:03:02,078 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_A add index FKCE3C1BF0B8CF4F47 (a_id), add constraint FKCE3C1BF0B8CF4F47 foreign key (a_id) references TABLE_A (a_id)
2012-08-24 15:03:02,087 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_A add index FKCE3C1BF066FAB663 (c_c_id), add constraint FKCE3C1BF066FAB663 foreign key (c_c_id) references TABLE_C (c_id)
2012-08-24 15:03:02,097 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_A_TABLE_B add index FK64E4EEA2F8F999F6 (TABLE_A_a_id), add constraint FK64E4EEA2F8F999F6 foreign key (TABLE_A_a_id) references TABLE_A (a_id)
2012-08-24 15:03:02,107 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_A_TABLE_B add index FK64E4EEA2C26A7AD5 (bs_b_id), add constraint FK64E4EEA2C26A7AD5 foreign key (bs_b_id) references TABLE_B (b_id)
2012-08-24 15:03:02,123 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_B add index FKCE3C1BF1B8CFC3A7 (b_id), add constraint FKCE3C1BF1B8CFC3A7 foreign key (b_id) references TABLE_B (b_id)
2012-08-24 15:03:02,141 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_B add index FKCE3C1BF163901C65 (a_a_id), add constraint FKCE3C1BF163901C65 foreign key (a_a_id) references TABLE_A (a_id)
2012-08-24 15:03:02,151 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate - alter table TABLE_B add index FKCE3C1BF166FAB663 (c_c_id), add constraint FKCE3C1BF166FAB663 foreign key (c_c_id) references TABLE_C (c_id)
2012-08-24 15:03:02,161 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000232: Schema update complete
2012-08-24 15:03:02,583 [main] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1451, SQLState: 23000
2012-08-24 15:03:02,583 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Cannot delete or update a parent row: a foreign key constraint fails (`kiri`.`table_a`, CONSTRAINT `FKCE3C1BF0B8CF4F47` FOREIGN KEY (`a_id`) REFERENCES `TABLE_A` (`a_id`))
这是堆栈:
org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`kiri`.`table_a`, CONSTRAINT `FKCE3C1BF0B8CF4F47` FOREIGN KEY (`a_id`) REFERENCES `TABLE_A` (`a_id`))
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy13.executeUpdate(Unknown Source)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3134)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3337)
at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:100)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:280)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1214)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:403)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
at com.kireego.tests.HibernateCyclicTest.tests(HibernateCyclicTest.java:59)
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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`kiri`.`table_a`, CONSTRAINT `FKCE3C1BF0B8CF4F47` FOREIGN KEY (`a_id`) REFERENCES `TABLE_A` (`a_id`))
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
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 org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
... 39 more
谢谢你的帮助。
最佳答案
我只是删除了 mappedBy
属性,它创建了额外的表但解决了问题。
关于java - Hibernate ConstraintViolationException 可能是由于循环方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110037/
我应该编写一个函数来打印一组给定的三个数字中两个较大数字的平方和。 我对这种情况的处理相当笨拙。我没有编写返回一组 3 中最大的两个数字的函数,而是编写了函数,以便表达式减少到两个所需的数字。 # S
如果有人可以提供帮助,我将不胜感激。我一直在敲我的头一天试图让这个工作。我已经在互联网上搜索并重新阅读了手册,但我就是不明白。 guile << __EOF__ ( define heading-li
目前我正在处理一个方案问题,其中我们正在使用方案列表表示一个图。我们使用的第一个变体是表示为 的边列表图 '((x y) (y z) (x z)) 我们正在使用的图的第二个变体被称为 x 图,表示为
我正在尝试创建一个函数,该函数将两个函数作为参数并执行它们。 我尝试使用 cond ,但它只执行 action1 . (define seq-action (lambda (action1 act
我提前为我的原始英语道歉;我会尽量避免语法错误等。 两周前,我决定更新我对 Scheme(及其启示)的知识,同时实现我在手上获得的一些数学 Material ,特别是我注册的自动机理论和计算类(cla
Scheme中有没有函数支持分数的“div”操作? 意思是 - 11 格 2.75 = 4。 最佳答案 我认为你的问题的答案是:没有,但你可以定义它: #lang racket (define (di
我在scheme中实现合并排序,我必须通过定义两个辅助方法来实现:merge和split。 Merge 需要两个列表(已经按递增顺序)并将它们合并在一起。我这样做了如下: (define merge
尝试从终端加载方案文件。我创建了一个名为 test.scm 的文件,其中包含以下代码: (define (square x) (* x x)) (define (sum-of-squares x y)
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我有点了解如何将基本函数(例如算术)转换为Scheme中的连续传递样式。 但如果函数涉及递归怎么办?例如, (define funname (lambda (arg0 arg1)
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
这个问题已经有答案了: How do I pass a list as a list of arguments in racket? (2 个回答) 已关闭 8 年前。 我有一个函数,它需要无限数量的
我对这段代码的工作方式感到困惑: (define m (list 1 2 3 '(5 8))) (let ((l (cdr m))) (set! l '(28 88))) ==>(1 2 3 (5 8
我正在为学校做一项计划作业,有一个问题涉及我们定义记录“类型”(作为列表实现)(代表音乐记录)。 我遇到的问题是我被要求创建一个过程来创建这些记录的列表,然后创建一个将记录添加到该列表的函数。这很简单
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
如何使用抽象列表函数(foldr、foldl、map 和 filter 编写函数),无需递归,消耗数字列表 (list a1 a2 a3 ...) 并产生交替和 a1 - a2 + a3 ...? 最
我试图找出在 Scheme 中发生的一些有趣的事情: (define last-pair (lambda (x) (if (null? (cdr x))
这个问题在这里已经有了答案: Count occurrence of element in a list in Scheme? (4 个答案) 关闭 8 年前。 我想实现一个函数来计算列表中元素出现
我正在尝试使用下面的代码获取方案中的导数。谁能告诉我哪里出错了?我已经尝试了一段时间了。 (define d3 (λ (e) (cond ((number? e) 0) ((e
我是一名优秀的程序员,十分优秀!