我正在尝试查找一个查询,它将返回一个表的外键列表以及它们引用的表和列.我在那里一半
SELECT a.table_name,
a.column_name,
a.constraint_name,
c.owner
FROM ALL_CONS_COLUMNS A, ALL_CONSTRAINTS C
where A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
and a.table_name=:TableName
and C.CONSTRAINT_TYPE = 'R'
Run Code Online (Sandbox Code Playgroud)
但我仍然需要知道此键引用了哪个表和主键.我怎么会这样?
我正在使用Hibernate并获取
线程"main"中的异常org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行:[#271]
这个错误的奇怪之处在于,具有给定id的对象存在于数据库中.我在有问题的应用程序运行中插入了有问题的记录.如果我在同一次运行中访问它(即相同的休眠会话),则检索数据似乎没有问题.
仅仅因为它可能是映射的错误:
public class ProblemClass implements Persistent {
@ManyToOne(optional = false)
private MyDbObject myDbObject;
}
public class MyDbObject implements Persistent {
@OneToMany(mappedBy = "myDbObject")
private List<ProblemClass> problemClasses;
@ManyToOne(optional = false)
private ThirdClass thirdClass;
}
Run Code Online (Sandbox Code Playgroud)
我绝对不知道哪里可以看.任何提示高度赞赏!
只是为了澄清:数据被插入到应用程序的另一个RUN中.它肯定在数据库中,因为我可以在应用程序终止后通过SQL查询看到它.在那之后,即再次启动应用程序时,我在数据库的FIRST查询中得到错误 - 没有删除,也没有涉及回滚.
另外:因为有人问过,这里是获取数据的代码:
public List<ProblemClass> getProblemClasses() {
Query query = session.createQuery("from ProblemClass");
return query.list();
}
Run Code Online (Sandbox Code Playgroud)
只是为了完成它,这里是插入它的通用代码(在获取应用程序的另一个RUN之前):
public void save(Persistent persistent) {
session.saveOrUpdate(persistent);
}
Run Code Online (Sandbox Code Playgroud) 我有一个无法修复的休眠问题.
设置:Java EE,Web应用程序,Hibernate 3.2,Tomcat 6,Struts 2.
基本上,我使用我的服务器逻辑(一个struts动作)来持久化对象,然后尝试将该数据拉出来用于下一页并显示它.
我保存对象后检查数据库,果然,我可以在那里看到包含所有数据的行.
但是当我尝试检索它时,我得到了这个:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [msc.model.Picture#73]
Run Code Online (Sandbox Code Playgroud)
为了使事情变得更加混乱,当我重新启动Tomcat并尝试访问同一个对象时,我没有得到错误 - Hibernate发现行就好了.
如果我做一些其他操作,Hibernate也能看到该行 - 可能在这里和那里添加一行到数据库,甚至不在同一个表上.
从这一切我怀疑一个Hibernate错误,但我是一个Hibernate新手所以我可能错了.请帮忙!我用Google搜索并用谷歌搜索无济于事.
这是我的Hibernate配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/msc</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">-------</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">80</property>
<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<mapping resource="msc/model/Picture.hbm.xml"/>
<mapping resource="msc/model/Comment.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
这是我的两个映射文件:
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) 我有一个问题,因为Hibernate 4.1.8导致以下异常:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [test.hibernate.TestPrepravkaOsobaSAdresou$Uvazek#2]
Run Code Online (Sandbox Code Playgroud)
我在两个实体之间有一个简单的OneToMany关联:
@Entity(name = "Ppv")
@Table(name = "PPV")
public static class Ppv {
@Id
Long ppvId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "ppv")
Set<Uvazek> uvazeks = new HashSet<Uvazek>(0);
}
@Entity(name = "Uvazek")
@Table(name = "UVAZEK")
public static class Uvazek {
@Id
Long uvazekId;
@ManyToOne
@JoinColumn(name = "PPV_FXID")
Ppv ppv;
}
Run Code Online (Sandbox Code Playgroud)
和一个测试案例,我有一个Ppv和两个Uvazek.当我加载和分离Ppv时,删除一个与加载的Ppv相关联的Uvazek并合并Ppv我得到一个异常.
jdbcTemplate.execute("insert into PPV values(1)");
jdbcTemplate.execute("insert into UVAZEK values(2, 1)");
jdbcTemplate.execute("insert into UVAZEK values(3, 1)");
Ppv ppv = (Ppv) getSession().get(Ppv.class, 1l); …Run Code Online (Sandbox Code Playgroud) 我打算从表中删除的数据,我想知道的表有多少和有外键参照甲骨文这个特定的表.因为我必须将外键设置为null.我想知道所有具有此特定表的FK的表的列表.