- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
|AA|多对多|BB|多对多 |CC|
与连接表映射成为
|AA|--|AA_BB|--|BB|--|BB_CC|--|CC|
(抱歉,我无法发布图片,声誉低)
编辑:简短的问题是为什么如果a创建Aa元素,Bb元素,Cc元素将 Cc 添加到 Bb 集合,将 Bb 添加到 Aa 集合保存(Aa)工作正常(AA_BB 已填充)?
但是如果我创建一个 Bb 元素、Aa 元素、Cc 元素将 Aa 添加到 Bb 集合中将抄送添加到 Bb 收藏保存(Bb)(AA_BB未填写?)
BB_CC 始终已满。
结束编辑
CREATE TABLE BB_CC (
BBIDBB number(10) NOT NULL,
CCIDCC number(10) NOT NULL,
PRIMARY KEY (BBIDBB,
CCIDCC));
CREATE TABLE AA_BB (
AAIDAA number(10) NOT NULL,
BBIDBB number(10) NOT NULL,
PRIMARY KEY (AAIDAA,
BBIDBB));
CREATE TABLE CC (
IDCC number(10) NOT NULL,
DESCR varchar2(10) NOT NULL,
PRIMARY KEY (IDCC));
CREATE TABLE BB (
IDBB number(10) NOT NULL,
DESCR varchar2(10) NOT NULL,
PRIMARY KEY (IDBB));
CREATE TABLE AA (
IDAA number(10) NOT NULL,
DESCR varchar2(10) NOT NULL,
PRIMARY KEY (IDAA));
ALTER TABLE BB_CC ADD CONSTRAINT FKBB_CC976918 FOREIGN KEY (BBIDBB) REFERENCES BB (IDBB);
ALTER TABLE BB_CC ADD CONSTRAINT FKBB_CC529716 FOREIGN KEY (CCIDCC) REFERENCES CC (IDCC);
ALTER TABLE AA_BB ADD CONSTRAINT FKAA_BB470776 FOREIGN KEY (AAIDAA) REFERENCES AA (IDAA);
ALTER TABLE AA_BB ADD CONSTRAINT FKAA_BB23574 FOREIGN KEY (BBIDBB) REFERENCES BB (IDBB);
hibernate 配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- ORACLE -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@10.10.1.8:1521:GEROS</property>
<property name="connection.username">xxxx</property>
<property name="connection.password">xxxx</property>
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup-->
<property name="hbm2ddl.auto">create</property>
<!-- Names the annotated entity class -->
<mapping class="it.erreeffe.erreeffe2.Aa"/>
<mapping class="it.erreeffe.erreeffe2.Bb"/>
<mapping class="it.erreeffe.erreeffe2.Cc"/>
</session-factory>
</hibernate-configuration>
以及表中的反向 jpa 类Aa(Bb、Cc 类似)缺少一些部分。
@Entity
public class Aa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="AA_IDAA_GENERATOR", sequenceName="SEQ_AA")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="AA_IDAA_GENERATOR")
private long idaa;
private String descr;
//bi-directional many-to-many association to Bb
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(
name="AA_BB"
, joinColumns={
@JoinColumn(name="AAIDAA")
}
, inverseJoinColumns={
@JoinColumn(name="BBIDBB")
}
)
private Set<Bb> bbs;
我的测试,第一个有效,第二个无效。
第一:
Session session;
SessionFactory sf_ORA = new Configuration().configure(
"hibernate.cfg.ora.xml").buildSessionFactory();
session = sf_ORA.openSession();
//A
Aa a = new Aa();
a.setDescr("A1");
a.setBbs(new HashSet<Bb>());
//B
Bb b1 = new Bb();
b1.setCcs(new HashSet<Cc>());
Bb b2 =new Bb();
b2.setCcs(new HashSet<Cc>());
b1.setDescr("B1");
b2.setDescr("B2");
//C
Cc c1 = new Cc();
Cc c2 = new Cc();
Cc c3 = new Cc();
c1.setDescr("C1");
c2.setDescr("C2");
c3.setDescr("C3");
//FILL B
b1.getCcs().add(c1);
b1.getCcs().add(c2);
b2.getCcs().add(c2);
b2.getCcs().add(c3);
//FILL A
a.getBbs().add(b1);
a.getBbs().add(b2);
session.beginTransaction();
try
{
session.save(a);
session.flush();
session.getTransaction().commit();
}
catch(HibernateException ex)
{
session.getTransaction().rollback();
throw ex;
}
这做正确的工作:Hibernate 为我创建了所有需要的语句:
Hibernate: insert into Aa (descr, idaa) values (?, ?)
Hibernate: insert into Bb (descr, idbb) values (?, ?)
Hibernate: insert into Cc (descr, idcc) values (?, ?)
Hibernate: insert into Cc (descr, idcc) values (?, ?)
Hibernate: insert into Bb (descr, idbb) values (?, ?)
Hibernate: insert into Cc (descr, idcc) values (?, ?)
Hibernate: insert into AA_BB (AAIDAA, BBIDBB) values (?, ?)
Hibernate: insert into AA_BB (AAIDAA, BBIDBB) values (?, ?)
Hibernate: insert into BB_CC (BBIDBB, CCIDCC) values (?, ?)
Hibernate: insert into BB_CC (BBIDBB, CCIDCC) values (?, ?)
Hibernate: insert into BB_CC (BBIDBB, CCIDCC) values (?, ?)
Hibernate: insert into BB_CC (BBIDBB, CCIDCC) values (?, ?)
连接结果查询是正确的:
A1|B1|C1
A1|B1|C2
A1|B2|C2
A1|B2|C3
第二(Ta-dan 这就是问题所在)从DB读取B1,添加新的Aa(A2)到B1。Aas集合添加新的Cc(c4)到B1。Ccs集合,更新B1。
Bb b1=null;
session.beginTransaction();
try
{
Query qGetB1=session.createQuery("Select id from Bb where DESCR ='B1'" );
long idB1=(Long) qGetB1.list().get(0);
b1=(Bb) session.load(Bb.class, idB1);
session.flush();
session.getTransaction().commit();
}
catch(HibernateException ex)
{
session.getTransaction().rollback();
throw ex;
}
Aa a2 = new Aa();
a2.setDescr("A2");
Cc c4 = new Cc();
c4.setDescr("C4");
b1.getAas().add(a2);
b1.getCcs().add(c4);
session.beginTransaction();
try
{
session.flush();
session.saveOrUpdate(b1);
session.flush();
session.getTransaction().commit();
}
catch(HibernateException ex)
{
session.getTransaction().rollback();
throw ex;
}
生成 Hibernate:
Hibernate: select bb0_.idbb as col_0_0_ from Bb bb0_ where DESCR='B1' //SEARCH B1 ID
Hibernate: select bb0_.idbb as idbb1_0_, bb0_.descr as descr1_0_ from Bb bb0_ where bb0_.idbb=? //GET B1
Hibernate: select aas0_.BBIDBB as BBIDBB1_1_, aas0_.AAIDAA as AAIDAA1_, aa1_.idaa as idaa0_0_, aa1_.descr as descr0_0_ from AA_BB aas0_, Aa aa1_ where aas0_.AAIDAA=aa1_.idaa and aas0_.BBIDBB=? GET B1.Aas
Hibernate: select ccs0_.BBIDBB as BBIDBB1_1_, ccs0_.CCIDCC as CCIDCC1_, cc1_.idcc as idcc2_0_, cc1_.descr as descr2_0_ from BB_CC ccs0_, Cc cc1_ where ccs0_.CCIDCC=cc1_.idcc and ccs0_.BBIDBB=? GET B1.Ccs
Hibernate: insert into Aa (descr, idaa) values (?, ?) //OK
Hibernate: insert into Cc (descr, idcc) values (?, ?) //OK
Hibernate: insert into BB_CC (BBIDBB, CCIDCC) values (?, ?) //OK
... What about AA_BB record???? //!!!!!!!!
为什么joinTable AA_BB没有填满?
感谢大家的关注。问候,弗朗西斯科。
最佳答案
当您有双向关联时,一侧是所有者侧(不带 mappedBy
属性的一侧),另一侧是反向侧(具有 mappedBy
属性的一侧)。
Hibernate 仅考虑所有者方来了解两个实体之间是否存在关联。因此,如果 A 是 A 和 B 之间关系的所有者方,则必须将 B 实例添加到 A 的集合中才能使关联持久化。将 A 实例添加到 B 的集合中没有任何效果。
一般来说,您负责维护对象图的一致性,因此您应该确保所有者端(至少)始终更新。
关于hibernate - 同样,JoinTable 未填充多对多 hibernate 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635551/
我找到了 this excellent question and answer它以 x/y(加上 center x/y 和 degrees/radians)开始并计算旋转- 到 x'/y'。这个计算很
全部: 我已经创建了一个 Windows 窗体和一个按钮。在另一个线程中,我试图更改按钮的文本,但它崩溃了;但是如果我尝试更改按钮的颜色,它肯定会成功。我认为如果您更改任何 Windows 窗体控件属
本网站的另一个问题已证实,C 中没有缩写的字面后缀,并且可以执行以下操作: short Number = (short)1; 但是转换它和不这样做有什么区别: short Number = 1; 您使
我有下表: ID (int) EMAIL (varchar(50)) CAMPAIGNID (int) isSubscribe (bit) isActionByUser (bit) 此表存储了用户对事
也就是说,无需触发Javascript事件即可改变的属性,如何保留我手动选中或取消选中的复选框的状态,然后复制到另一个地方? 运行下面的代码片段并选中或取消选中其中的一些,然后点击“复制”: $('#
我在网上找到的所有关于递增指针导致段错误的示例都涉及指针的取消引用 - 如果我只想递增它(例如在 for 循环的末尾)并且我不在乎它是否最终进入无效内存,因为我不会再使用它。例如,在这个程序中,每次迭
我有一个 Spring MVC REST 服务,它使用 XStream 将消息与 XML 相互转换。 有什么方法可以将请求和响应中的 xml(即正文)打印到普通的 log4j 记录器? 在 Contr
做我的任务有一个很大的挑战,那就是做相互依赖的任务我在这张照片中说的。假设我们有两个任务 A 和 B,执行子任务 A1、A2 和 B1、B2,假设任务 B 依赖于 A。 要理想地执行任务 B,您应该执
通过阅读该网站上的几个答案,我了解到 CoInitialize(Ex) should be called by the creator of a thread 。然后,在该线程中运行的任何代码都可以使
这个问题已经困扰我一段时间了。我以前从未真正使用过 ListViews,也没有使用过 FirebaseListAdapters。我想做的就是通过显示 id 和用户位置来启动列表的基础,但由于某种原因,
我很难解释这两个(看似简单)句子的含义: “受检异常由编译器在编译时检查” 这是什么意思?编译器检查是否捕获了所有已检查的异常(在代码中抛出)? “未经检查的异常在运行时检查,而不是编译时” 这句话中
我有一个包含排除子字符串的文本文件,我想迭代该文件以检查并返回不带排除子字符串的输入项。 这里我使用 python 2.4,因此下面的代码可以实现此目的,因为 with open 和 any 不起作用
Spring 的缓存框架能否了解请求上下文的身份验证状态,或者更容易推出自己的缓存解决方案? 最佳答案 尽管我发现这个用例 super 奇怪,但您可以为几乎任何与 SpEL 配合使用的内容设置缓存条件
我有以下函数模板: template HeldAs* duplicate(MostDerived *original, HeldAs *held) { // error checking omi
如果我的应用程序具有设备管理员/设备所有者权限(未获得 root 权限),我如何才能从我的应用程序中终止(或阻止启动)另一个应用程序? 最佳答案 设备所有者可以阻止应用程序: DevicePolicy
非常简单的问题,但我似乎无法让它正常工作。 我有一个组件,其中有一些 XSLT(用于导航)。它通过 XSLT TBB 使用 XSLT Mediator 发布。 发布后
我正在将一个对象拖动到一个可拖放的对象内,该对象也是可拖动的。放置对象后,它会嵌套在可放置对象内。同样,如果我将对象拖到可放置的外部,它就不再嵌套。 但是,如果我经常拖入和拖出可放置对象,则可拖动对象
我正在尝试为按钮和弹出窗口等多个指令实现“取消选择”功能。也就是说,我希望当用户单击不属于指令模板一部分的元素时触发我的函数。目前,我正在使用以下 JQuery 代码: $('body').click
我从 this question 得到了下面的代码,该脚本用于在 Google tasks 上更改 iframe[src="about:blank"] 内的 CSS使用 Chrome 扩展 Tempe
我有一些 @Mock 对象,但没有指定在该对象上调用方法的返回值。该方法返回 int (不是 Integer)。我很惊讶地发现 Mockito 没有抛出 NPE 并返回 0。这是预期的行为吗? 例如:
我是一名优秀的程序员,十分优秀!