You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Joose Vettenranta <jo...@iki.fi> on 2004/07/22 09:40:41 UTC
Foreignkey problem
Hi,
using db-ojb-1.0.rc6.jar and jdo 1.0.1
I'm trying to make simple thing to work. But it seems to just add
those in wrong order and causes referency error. I've been googling and
trying different configurations but only thing I get is different error
message.
Questin is, how to get this thing to work?
Database get's this much:
Jul 22 10:29:45 cellula postgres[31986]: [18] LOG: query: begin;
Jul 22 10:29:45 cellula postgres[31986]: [19] LOG: query: select
nextval('file_categories_id_seq')
Jul 22 10:29:45 cellula postgres[31986]: [20] LOG: query: select
nextval('category_names_id_seq')
Jul 22 10:29:45 cellula postgres[31986]: [21] LOG: query: SELECT 1
Jul 22 10:29:45 cellula postgres[31986]: [22] LOG: query: rollback;
begin;
Jul 22 10:29:45 cellula postgres[31986]: [23] LOG: query: SELECT 1
Jul 22 10:29:45 cellula postgres[31986]: [24] LOG: query: end
With this setup I get this error message:
org.apache.ojb.jdori.sql.OjbStoreFatalInternalException:
org.apache.ojb.jdori.sql.OjbStoreManager.insert NestedThrowables:
org.apache.ojb.broker.metadata.MetadataException: Can't find member
'file_categories' in net.vettenranta.category.bean.CategoryName
....
Caused by: org.apache.ojb.broker.metadata.MetadataException: Can't find
member 'file_categories' in net.vettenranta.category.bean.CategoryName
....
Caused by: java.lang.NoSuchFieldException: file_categories
.....
NestedThrowablesStackTrace:
org.apache.ojb.broker.metadata.MetadataException: Can't find member
'file_categories' in net.vettenranta.category.bean.CategoryName
.............
Caused by: java.lang.NoSuchFieldException: file_categories
.......
I have (in postgresql) tables:
--------------
create table file_categories (
id serial,
parent integer not null,
primary key(id),
foreign key(parent) references file_categories (id));
create table category_names (
id serial,
category_id integer not null,
lang_id integer not null,
name varchar(50),
primary key(id),
foreign key(category_id) references file_categories(id));
--------------
repository.xml:
--------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE descriptor-repository PUBLIC "-//Apache Software
Foundation//DTD OJB Repository//EN" "repository.dtd">
<descriptor-repository version="1.0" isolation-level="read-uncommitted">
<jdbc-connection-descriptor jcd-alias="filestore"
default-connection="true" platform="PostgreSQL"
subprotocol="postgresql">
<sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImp
l"/>
</jdbc-connection-descriptor>
<class-descriptor class="net.vettenranta.category.bean.Category"
table="file_categories">
<field-descriptor name="id" jdbc-type="INTEGER" primarykey="true"
default-fetch="true" access="readonly" indexed="true"
autoincrement="true" sequence-name="file_categories_id_seq" column="id"
nullable="false"/>
<field-descriptor name="parent" column="parent"
default-fetch="true" jdbc-type="INTEGER"/>
<collection-descriptor name="names"
element-class-ref="net.vettenranta.category.bean.CategoryName"
auto-retrieve="true"
auto-update="false"
auto-delete="true">
<inverse-foreignkey field-ref="category"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="net.vettenranta.category.bean.CategoryName"
table="category_names">
<field-descriptor name="id" jdbc-type="INTEGER" primarykey="true"
default-fetch="true" access="readonly" indexed="true"
autoincrement="true" sequence-name="category_names_id_seq" column="id"
nullable="false"/>
<field-descriptor name="name" column="name" default-fetch="true"
jdbc-type="VARCHAR"/>
<field-descriptor name="lang" column="lang_id" jdbc-type="INTEGER"
default-fetch="true"/>
<field-descriptor name="name" nullable="false" default-fetch="true"
column="category_id" jdbc-type="INTEGER" />
<!---
I have also tried reference-descriptor name="category"
class-ref="net.vettenranta.category.bean.Category" -> Error message:
org.apache.ojb.jdori.sql.OjbStoreFatalInternalException:
org.apache.ojb.jdori.sql.OjbStoreManager.insert NestedThrowables:
org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException:
java.lang.Integer not found in OJB Repository
if reference descriptor is removed, then it's going to do inserting in
wrong order, like this:
insert into category_names;
insert into file_categories;
which causes error in SQL-server because name was entered with
category_id which is not present in file_categories!
-->
<reference-descriptor name="file_categories"
class-ref="net.vettenranta.category.bean.Category"
refresh="true"
auto-retrieve="true"
auto-update="true"
auto-delete="true">
<foreignkey field-ref="category" />
</reference-descriptor>
</class-descriptor>
</descriptor-repository>
--------------
package.jdo:
--------------
<jdo>
<package name="net.vettenranta.category.bean">
<class name="Category" identity-type="datastore">
<extension vendor-name="ojb" key="table"
value="file_categories"/>
<field name="id" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column" value="id"/>
</field>
<field name="parent" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column"
value="parent"/>
</field>
<field name="names">
<collection element-type="CategoryName">
<extension vendor-name="ojb" key="inverse" value="id" />
</collection>
</field>
</class>
<class name="CategoryName" identity-type="datastore">
<extension vendor-name="ojb" key="table"
value="category_names"/>
<field name="id" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column" value="id"/>
</field>
<field name="lang" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column"
value="lang_id"/>
</field>
<field name="category" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column"
value="category_id"/>
</field>
<field name="name" persistence-modifier="persistent">
<extension vendor-name="ojb" key="column" value="name"/>
</field>
</class>
</package>
</jdo>
--------------
Category.java:
--------------
public class Category implements Serializable {
protected int parent;
private int id;
private Collection names = new ArrayList();
public Category () {
parent = 0;
}
public void setId (int id) { this.id = id; }
public int getId () { return this.id; }
public void setParent (int parent) {
this.parent = parent;
}
public int getParent () {
return this.parent;
}
public void setNames (Collection names) {
this.names = names;
}
public void addNames (CategoryName name) {
names.add (name);
}
public Collection getNames() {
return this.names;
}
}
--------------
CategoryName.java:
--------------
public class CategoryName implements Serializable {
private int id;
private String name;
private int lang;
private int category;
public CategoryName () {
this.lang=1;
}
public int getId () { return id; }
public String getName () { return name; }
public int getLang () { return lang; }
public int getCategory () {
return this.category;
}
public void setId (int id) { this.id = id; }
public void setLang (int lang) { this.lang = lang; }
public void setName (String name) { this.name = name; }
public void setCategory (int category) {
this.category = category;
}
}
--------------
--
"Always remember that you are unique, just like everyone else!"
* http://iki.fi/joose/ * joose@iki.fi * +358 44 561 0270 *
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org