Casting

Status
Nicht offen für weitere Antworten.

lumo

Top Contributor
Hallo,

habe folgendes 'problem'
habe eine klasse mit variablen (generiert durch hibernate zb: Tsite - tabelle fundort)
diese klasse wird extended von einer anderen (Site - fundort), die dann funktionen auf die parent-klasse bietet (getter setter etc...).

mein problem ist nun... wenn ich mit hibernate eine abfrage mache, bekomme ich Tsite zurück.
nun muss ich, um alle meine implementierten funktionen nützen zu können die Tsite in eine Site casten (was nicht klappt. - es klappt nur von Site -> Tsite, abwärts)

gibts ne möglichkeit ausser der implementierung einer Site.fromTsite(Tsite tsite) funktion, eine Tsite in eine übergeordnete klasse Site überzuführen? (immerhin sind ja nur die gleichen variablen belegt...)

danke schon mal
lumo

edit also so:
Java:
/**
 * Tsites generated by hbm2java
 */
public class Tsites implements java.io.Serializable {

	protected static final long serialVersionUID = 1L;

	protected int sitIdSite;
	protected String sitGuidSite;

	public Tsites(int sitIdSite, String sitGuidSite) {
		this.sitIdSite = sitIdSite;
		this.sitGuidSite = sitGuidSite;
	}
}
Java:
public class Site extends Tsites {
	private static final long serialVersionUID = 1L;

	public Site(int id, String guid) {
		super(id, guid);
	}

	/*
	 * Getters / Setters (Pairs)
	 */
	public int getId() {
		return super.sitIdSite;
	}

	public void setId(int siteId) {
		super.sitIdSite = siteId;
	}

	public String getGuid() {
		return super.sitGuidSite;
	}

	public void setGuid(String guid) {
		super.sitGuidSite = guid;
	}
	
	public static Site fromTsite(Tsites tsite){
		return new Site(tsite.sitIdSite, tsite.sitGuidSite);
		
	}
}

allerdings wäre das dann kein "richtiger" cast...
Java:
		Tsites ts = new Tsites(911, "SiteGUID");
		Site ss = Site.fromTsite(ts);
 
Zuletzt bearbeitet:
S

SlaterB

Gast
du könntest Hibernate sagen, dass es gleich ein übergeordnetes Objekt erstellen soll,
kannst exakt dasselbe Mapping nehmen, zumindest per Mapping-Datei, per Annotation sicher auch,
und dann das höhere Objekt laden,

unabhängig von Hibernate ist es aber nicht möglich, einfach die Klasse zu wechseln
 

lumo

Top Contributor
du könntest Hibernate sagen, dass es gleich ein übergeordnetes Objekt erstellen soll,
kannst exakt dasselbe Mapping nehmen, zumindest per Mapping-Datei, per Annotation sicher auch,
und dann das höhere Objekt laden,

also ich machs per mapping-datei, allerdings weiss ich nicht, wie das funktionieren soll, hast du ev. ein beispiel?

EDIT: also das zurücksenden ins hibernate seh ich nicht das problem, da ich ja Site nach Tsite casten kann... nur anders rum halt nicht...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
    <class name="x.y.A" table="XY">
	<id name="id" type="long">
	  ..
	</id>

	<property name="x" type="long">
            <column name="y"/>
        </property>

    </class>
</hibernate-mapping>

-------------

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
    <class name="x.y.AB" table="XY">
	<id name="id" type="long">
	  ..
	</id>

	<property name="x" type="long">
            <column name="y"/>
        </property>

    </class>
</hibernate-mapping>
zweimal das gleiche Mapping auf dieselbe Tabelle, nur unterschiedliche Java-Klasse, bei Bedarf auch noch die Menge der Attribute anpassen,
an sich kein Problem, wobei du vermeiden solltest, etwa zum Erstellen/ Löschen beide Klassen zu verwenden
 

lumo

Top Contributor
so, zurückgekehrt... jetzt wird per hibernate die klasse schon als Site mit gewünschten variablen und funktionen geliefert! (warum nicht gleich so?)

danke!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben