-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Mapping to an unmapped class.
PostPosted: Tue Aug 03, 2004 12:14 pm 
Newbie

Joined: Tue Aug 03, 2004 11:54 am
Posts: 3
Hibernate version = 2.1
Database - Sybase Anywhere 7.0.4

I have a class called as StoreRemoteSite which extends RemoteSite. There is a one-to-one association between StoreRemoteSite and RemoteSite. The mapping for this works fine. The SchemaExport utility creates the tables correctly. However, StoreRemoteSite needs to have an additional column that is a foreig-key to a Store table. The persistant class for the Store table is called as Store. However, this class is legacy code and is not mapped via hibernate. Also, I do not have access to the Store class. Is there any way, I can generate appropriate mapping for StoreRemoteSite so that it also can reference the unmapped Store class.

The following are the classes that I am using..
/**
*
* @hibernate.class table="Remote_Site" schema="dev_group"
*
*/
public class RemoteSite
{
private String _id = null;
private String _ipAddress = null;
private String _recordVersion = null;
private String _shortDescription = null;
private String _longDescription = null;
private Set _machines = null;
public RemoteSite()
{
super();
}
/**
* @hibernate.id generator-class="uuid.hex" column="I_REMOTE_SITE_ID"
*/
public String getId()
{
return this._id;
}
public void setId(String value)
{
this._id = value;
}
/**
* @hibernate.property column="Ip_Address" length="256" not-null="true"
*/
public String getIpAddress()
{
return _ipAddress;
}
public void setIpAddress(String _ipAddress)
{
this._ipAddress = _ipAddress;
}
/**
* @hibernate.version column="Record_Version" type="com.pinncorp.framework.hibernate.UUIDType"
*/
public String getRecordVersion()
{
return _recordVersion;
}
public void setRecordVersion(String _recordVersion)
{
this._recordVersion = _recordVersion;
}
/**
* Retrieves RemoteMachine entities from the database that belong to this remote site.
*
* @hibernate.set role="machines" inverse="true" lazy="true" cascade="all"
* @hibernate.collection-key column="I_Remote_Site_Id"
* @hibernate.collection-one-to-many class="com.pinncorp.distmngr.common.remotesite.RemoteMachine"
*/
public Set getRemoteMachines()
{
return _machines;
}
public void setRemoteMachines(Set remoteMachines)
{
this._machines = remoteMachines;
}
/**
* @hibernate.property column="Short_Description" length="25" not-null="true"
*/
public String getShortDescription()
{
return _shortDescription;
}
public void setShortDescription(String shortDescription)
{
this._shortDescription = shortDescription;
}
/**
* @hibernate.property column="Long_Description" length="60" not-null="true"
*/
public String getLongDescription()
{
return _longDescription;
}
public void setLongDescription(String longDescription)
{
this._longDescription = longDescription;
}
/**
* This method returns the configuration for all application instances that reside in
* each machine owned by the remote site.
*
* @return String : The entire configuration for the remote site as an XML String
*/
public String getConfiguration(Date date)
{
StringBuffer xmlConfig = new StringBuffer( );

//Add XML Header document.

//For each machine
for ( Iterator ir = _machines.iterator(); ir.hasNext(); )
{
RemoteMachine machine = ( RemoteMachine ) ir.next();
xmlConfig.append( machine.getConfiguration( date ) );
}

return xmlConfig.toString();
}
}

/**
* @hibernate.joined-subclass schema="dev_group"
* @hibernate.joined-subclass-key column="I_Remote_Site_Id"
*/
public class StoreRemoteSite extends RemoteSite
{
private Store _store = null;

public StoreRemoteSite()
{
super();
}

/**
* @hibernate.one-to-one class="com.pinncorp.sysmngr.store.Store"
* cascade="all"
*/
public Store getStore( )
{
return _store;
}
public void setStore( Store store )
{
this._store = store;
}
}

The generated mapping files are as follows....
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class
name="com.pinncorp.distmngr.common.remotesite.RemoteSite"
table="Remote_Site"
schema="dev_group"
dynamic-update="false"
dynamic-insert="false"
>

<id
name="id"
column="I_REMOTE_SITE_ID"
type="java.lang.String"
>
<generator class="uuid.hex">
</generator>
</id>

<version
name="recordVersion"
type="com.pinncorp.framework.hibernate.UUIDType"
column="Record_Version"
access="property"
unsaved-value="undefined"
/>

<property
name="ipAddress"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="Ip_Address"
length="256"
not-null="true"
/>

<set
name="remoteMachines"
lazy="true"
inverse="true"
cascade="all"
sort="unsorted"
>

<key
column="I_Remote_Site_Id"
>
</key>

<one-to-many
class="com.pinncorp.distmngr.common.remotesite.RemoteMachine"
/>
</set>

<property
name="shortDescription"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="Short_Description"
length="25"
not-null="true"
/>

<property
name="longDescription"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="Long_Description"
length="60"
not-null="true"
/>

<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-RemoteSite.xml
containing the additional properties and place it in your merge dir.
-->

<joined-subclass
name="com.pinncorp.distmngr.common.remotesite.StoreRemoteSite"
schema="dev_group"
dynamic-update="false"
dynamic-insert="false"
>
<key
column="I_Remote_Site_Id"
/>

<one-to-one
name="store"
class="com.pinncorp.sysmngr.store.Store"
cascade="all"
outer-join="auto"
constrained="false"
/>

</joined-subclass>

</class>

</hibernate-mapping>


And here's the table DDLs created by SchemaExport...

create table dev_group.StoreRemoteSite
(
I_Remote_Site_Id VARCHAR(255) not null,
primary key (I_Remote_Site_Id)
);

create table dev_group.Remote_Site (
I_REMOTE_SITE_ID VARCHAR(255) not null,
Record_Version VARCHAR(255) not null,
Ip_Address VARCHAR(256) not null,
Short_Description VARCHAR(25) not null,
Long_Description VARCHAR(60) not null,
primary key (I_REMOTE_SITE_ID)
);

create table dev_group.Remote_Machine (
I_REMOTE_MACHINE_ID VARCHAR(255) not null,
Record_Version VARCHAR(255) not null,
Description VARCHAR(25) not null,
Ip_Address VARCHAR(256) not null,
I_Remote_Site_Id VARCHAR(255) not null,
primary key (I_REMOTE_MACHINE_ID)
);
alter table dev_group.StoreRemoteSite add constraint FKC5AB604E90C884F0 foreign key (I_Remote_Site_Id) references dev_group.Remote_Site;

alter table dev_group.Remote_Machine add constraint FK99C9A14E90C884F0 foreign key (I_Remote_Site_Id) references dev_group.Remote_Site;

My actual question is how would I create a mapping in my StoreRemoteSite class so that the table dev_group.StoreRemoteSite, also, has another column that is a foreign key to my Store table eventhough the Store class is an unmapped object?


Top
 Profile  
 
 Post subject: Need to map Store Class
PostPosted: Tue Aug 03, 2004 2:34 pm 
Beginner
Beginner

Joined: Thu Nov 20, 2003 8:13 pm
Posts: 31
Location: Newport Beach, CA
AFAIK, you must map the Store Class if you wish to manage the foreign key through Hibernate.

Alternatively, simply leave the foreign key field unmapped in StoreRemoteSite. You won't be able to manage the Store relationship but you won't need to map it, either.

If you must manage the relationship and do not have source access to the Store Class, no big deal, just write your own Store Class and map that.

Also, please use the [ code ] ... [ /code ] tags when posting code or XML snippets. It preserves indentation formatting.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 03, 2004 2:38 pm 
Newbie

Joined: Tue Aug 03, 2004 11:54 am
Posts: 3
Thanks for the quick reply. I think for now, I might just leave the foreign key field unmapped.

And thanks for the tip on using <Code> tag.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.