Gathering of Tweakers

Quicksearch
Ik heb een class klant met de naw-gegevens.
Hieronder hangen 2 classes HoofdKlant en SubKlant, welke dus de gegevens van klant erven.

Nu wil ik dat mappen naar de database via de table-per-concrete-class methode.

Ik heb de volgende info:
http://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html

Nu heb ik de HoofdKlant en de SubKlant gemapped, hierin heb ik ook de property's van de class Klant opgenomen. Ik heb de code van 1 class onderaan toegevoegd.

Als ik nu de applicatie start krijg ik de melding:
An association from the table tbl_project refers to an unmapped class: Klant

Ik heb ook nog geen mapping gemaakt voor de hoofd-class. Maar ik kan ook niet echt uit dat document opmaken wat de bedoeling is.

Heeft iemand ervaring met het mappen hiervan?
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   namespace="Weekstaat.Domein"
                   assembly="Weekstaat">
  <class name="HoofdKlant" table="tbl_Klant">
    <id name="KlantNummer" type="int" column="klantNummer">
      <generator class="native"/>
    </id>
    <property name="Naam" column="naam" type="String"/>
    <property name="Adres" column="adres" type="String"/>
    <property name="Postcode" column="postcode" type="String"/>
    <property name="Woonplaats" column="woonplaats" type="String"/>
    <property name="Postbus" column="postbus" type="int"/>
    <property name="PostbusPostcode" column="postbusPostcode" type="String"/>
    <property name="Telefoon" column="telefoon" type="String"/>
    <property name="Email" column="email" type="String"/>
    <property name="Fax" column="fax" type="String"/>
    <property name="Contactpersoon" column="contactpersoon" type="String"/>
    <property name="ContactpersoonEmail" column="contactpersoonEmail" type="String"/>
    <property name="ContactpersoonTelefoon" column="contactpersoonTelefoon" type="String"/>
    <property name="Kvk" column="kvk" type="int"/>
    <property name="BtwNummer" column="btwNummer" type="String"/>
    <property name="ProjectenGescheiden" column="projectenGescheiden" type="Boolean"/>
    <many-to-one name="Vestiging" column="vestigingNummer" class="Weekstaat.Domein.Vestiging, Weekstaat"/>
    <any name="Klant" meta-type="class" id-type="int">
      <column name="naam"/>
      <column name="adres"/>
      <column name="postcode"/>
      <column name="woonplaats"/>
      <column name="postbus"/>
      <column name="postbusPostcode"/>
      <column name="telefoon"/>
      <column name="email"/>
      <column name="fax"/>
      <column name="Contactpersoon"/>
      <column name="naContactpersoonEmail"/>
      <column name="ContactpersoonTelefoon"/>
    </any>
  </class>
</hibernate-mapping>

 
Berichten: 3417
Reg. datum: 28 april 2000

Het any element is volgens mij alleen bedoeld om te verwijzen naar een Klant instantie ( Soort van many-to-one element ). Dus in je project mapping moet je any gebruiken.

To be, or not to be, those are the parameters

Oke, ik ga het nu even testen. En dan post ik de resultaten.
 
Berichten: 3417
Reg. datum: 28 april 2000

Je moet dan in je projecten table wel zorgen dat er een collumn is waardoor bepaald kan worden welk type Klant het is.

To be, or not to be, those are the parameters

Oke. Had je reply nog niet gelezen.

Ik heb een column klantNummer en dan maak ik een column klantType aan.

Dan de mapping:
XML:
1
2
3
4
<any name="Klant" id-type="int" meta-type="class">
      <column name="klantNummer"/>
      <column name="klantType"/>
</any>

jorisstoop wijzigde dit bericht 09-05-2008 16:55 (175%)

 
Nou, de applicatie draait. De mappings geven geen errors meer. Heb het gedaan, zoals hierboven aangegeven.
 
Alle projecten en klanten zitten in de applicatie.
Alleen lukt het me nog niet om alle projecten uit de database te krijgen gesorteerd op klantnaam. Op de een of andere manier lukt dat niet.

Ik probeer het telkens met een join, maar volgens mij is dat geen goede oplossing. Er zijn namelijk 2 tabellen. tbl_subklant en tbl_hoofdklant. Echter erven ze allebei van het object klant.
C#:
1
IList alleProjecten = currentSession.CreateQuery("FROM Project as p INNER JOIN p.Klant as k where p.Actief = 1 order by k.Naam").List();

Deze query sorteert op de naam van het project ipv de klant. Klant is dus een property van project. Een klant kan een Hoofdklant of een Subklant zijn.
 
Berichten: 3417
Reg. datum: 28 april 2000

Ik ben niet zo heel erg thuis in Hibernate queries maar kan je niet het volgende doen
HQL:
1
FROM Project as p WHERE p.Actief = 1 ORDER BY p.Klant.Naam

To be, or not to be, those are the parameters

Had ik inderdaad ook al geprobeerd.

Dan krijg je de volgende foutmelding:

could not resolve property: Klant.Naam of: Weekstaat.Domein.Project [FROM Weekstaat.Domein.Project as p WHERE p.Actief = 1 ORDER BY p.Klant.Naam]
 
Berichten: 3417
Reg. datum: 28 april 2000

quote:
jorisstoop schreef op woensdag 14 mei 2008 @ 15:42:
Had ik inderdaad ook al geprobeerd.

Dan krijg je de volgende foutmelding:

could not resolve property: Klant.Naam of: Weekstaat.Domein.Project [FROM Weekstaat.Domein.Project as p WHERE p.Actief = 1 ORDER BY p.Klant.Naam]
Dat komt waarschijnlijk omdat je Klant niet gemapped hebt en die heeft dus geen Naam property in de mapping van NHibernate.

Mischien zul je je mapping toch wat anders op moeten zetten.

To be, or not to be, those are the parameters

Klant is op de volgende manier gemapped in de class project.:
XML:
1
2
3
4
<any name="Klant" id-type="int" meta-type="class">
      <column name="klantType"/>
      <column name="klantNummer"/>      
</any>

Dit werkt opzich goed, alleen dus niet goed met een join blijkbaar.

Staat dus ook in het volgende artikel (tabel onderaan). Heb dus de laatste optie. Die moet dus worden aangepast. naar denk ik de 2de. Lijkt mij de handigste.

http://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html

jorisstoop wijzigde dit bericht 14-05-2008 16:08 (40%)

 
Berichten: 3417
Reg. datum: 28 april 2000

quote:
jorisstoop schreef op woensdag 14 mei 2008 @ 15:59:
Klant is op de volgende manier gemapped in de class project.:
XML:
1
2
3
4
<any name="Klant" id-type="int" meta-type="class">
      <column name="klantType"/>
      <column name="klantNummer"/>      
</any>

Dit werkt opzich goed, alleen dus niet goed met een join blijkbaar.
Dat komt dus omdat je een Join hebt met "Klant", Maar aangezien er bij Klant geen Properties gedefineerd zijn kan je daar dus ook niet op selecteren ( of orderen ) Dat toevallig alle sub-classes van Klant wel die property hebben veranderd daar niks aan.

Als je bijvoorbeeld de Table-Per-Subclass structuur aanhoud en de naam map je bij de Klant tabel dan kan je wel doen wat jij wilt.
quote:
Staat dus ook in het volgende artikel (tabel onderaan). Volgens mij heb ik dus die laatste optie.
http://www.hibernate.org/hib_docs/reference/en/html/inheritance.html
Het gaat hier idd mis op Joins.

Je hebt dus 2 opties. Of je sorteerd in je applicatie ( List<T>.Sort(IComparer<T> ) bijvoorbeeld )of je moet een andere manier van mapping aanhouden ( Bijvoorbeeld de Table-Per-Subclass methode )

To be, or not to be, those are the parameters

Ik gebruik zoveel joins, dus ga toch voor de table-per-subclass
 


© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Adrastos

© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Adrastos

[RSS][XML]

Update Tracker

Active Topics
Active Topics
Frontpage Nieuws
Frontpage Nieuws