我有一个域对象T,它与另一个域对象pTW具有oneToMany关系。这是我的班级T
中的代码@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "t")
@OrderBy("dateRequested desc")
@ForeignKey(name = "fk_t_ptw")
private final List<PTW> pTWList = new ArrayList<PTW>();
问题是当我更新,删除或插入T时,pTW中的所有信息都会被忽略。其他类型的关系不会发生这个问题。注释@OneToMany属于javax.persistence包。日志根本没有任何问题。
我的直觉是jar文件可能存在一些冲突或问题。这是我在运行mvn:dependency:tree:
时获得的Hibernate[INFO] +- org.hibernate:hibernate-core:jar:4.2.0.Final:compile
[INFO] | +- antlr:antlr:jar:2.7.7:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.0.Final:compile
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | \- org.javassist:javassist:jar:3.15.0-GA:compile
[INFO] +- org.hibernate:hibernate-envers:jar:4.2.0.Final:compile
[INFO] | \- org.hibernate:hibernate-entitymanager:jar:4.2.0.Final:compile
[INFO] +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile
[INFO] +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile
[INFO] +- org.hibernate:hibernate-tools:jar:4.0.0-CR1:compile
[INFO] | +- javax.transaction:jta:jar:1.1:compile
[INFO] | +- ant:ant:jar:1.6.5:compile
[INFO] | +- org.hibernate:jtidy:jar:r8-20060801:compile
[INFO] | +- org.eclipse.tycho:org.eclipse.jdt.core:jar:3.8.0.v_C03:compile
[INFO] | +- org.eclipse:text:jar:3.2.0-v20060605-1400:compile
[INFO] | | +- org.eclipse.core:commands:jar:3.3.0-I20070605-0010:compile
[INFO] | | \- org.eclipse.equinox:common:jar:3.2.0-v20060603:compile
[INFO] | \- org.eclipse.core:runtime:jar:3.2.0-v20060603:runtime
[INFO] | +- org.eclipse:osgi:jar:3.4.3.R34x_v20081215-1030:runtime
[INFO] | +- org.eclipse.core:jobs:jar:3.3.0-v20070423:runtime
[INFO] | +- org.eclipse.equinox:registry:jar:3.3.0-v20070522:runtime
[INFO] | +- org.eclipse.equinox:preferences:jar:3.2.100-v20070522:runtime
[INFO] | \- org.eclipse.core:contenttype:jar:3.2.100-v20070319:runtime
有没有人遇到过同样的问题?感谢
答案 0 :(得分:0)
你的依赖:树看起来不错,但你的@OneToMany却没有。您应该在PTW上有一个@ManyToOne,如果您明确指定JoinColumn应该在哪里:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "T_ID")
private T t;
另一方面,T应携带@OneToMany并使用“mappedBy”指定连接列
@OneToMany(mappedBy="t", fetch = FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
private List<PTW> pTWList = new ArrayList<PTW>();
答案 1 :(得分:0)
问题排序。
第一个错误。我继承了该项目的开发人员确实在svn中提交了一些在svn中进行审计所需的数据库更改。 第二个错误。审计框架忽略任何错误。它只是回滚失败的事务并在日志文件中写入警告消息,甚至没有错误消息,警告!
与Hibernate或maven或任何技术上有趣的事情无关。再次感谢wallenborn的贡献。