HashMap etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
HashMap etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Ağustos 2011 Perşembe

Hibernate - Annotation ile One-to-Many Mapping

Merhabalar,

Bugün Hibernate Framework'u ile one-to-many ilişkisi olan sınıfları veritabanımıza nasıl kaydeder ve çekeriz inceleyeceğiz.
Öncelikle, one-to-many nedir bunu inceleyelim. OOP terimlerinden olup, birden çoğa ilişki olarak Türkçeleştirilebilir. Bir örnekle açıklamak gerekirse, bir okulumuz var ve içinde öğrenciler var. Her öğrenciye ait bir veya daha fazla telefon numarası var. Bunu aşağıdaki şekilde gösterebiliriz.







Bu gibi bir durumu gerçeklemek için yazacağımız annotationları aşağıya kısaca yazıyorum, kodları koymak hayli uzun süreceği için.

  @OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
  @JoinTable(name="CAR_CITY",joinColumns={@JoinColumn(name="ID")},inverseJoinColumns={@JoinColumn(name="CITY_ID")})
    @MapKeyColumn(name="carkey")
 
    private Map<String, City> cityMap = new HashMap<String, City>();

List ve ArrayList objeleri için de yapmak için @MapKeyColumn kısmını çıkartmak yeterli olacaktır. şimdilik bu kadar.

Kolay gelsin.

29 Temmuz 2011 Cuma

Castor ile HashMap objesini XML'e Çevirme ve Geri Oluşturma

Merhabalar,

Bugün Castor ile projelere devam ettim. Bu sefer önümdeki problem sınıfın içinde başka bir sınıf objelerini tutan hashmap objesini nasıl XML'e aktarırım ve oradan geri nasıl okurum(marshalling ve unmarshalling) oldu. Bunu küçük bir araştırma ve denemelerden sonra çözdüm. Burada olayı nested class olarak çözmeye çalışmamız gerekiyor. mapping.xml i aşağıya koyuyorum daha anlaşılır olacaktır.

mapping.xml

<?xml version="1.0"?>
<mapping>
        <class name="HeadQuarter">
            <map-to xml="HQ"></map-to>
            <field name="name" type="string">
                <bind-xml name="Name" node="attribute" />
            </field>
            <field name="size" type="integer">
                <bind-xml name="Size" node="attribute" />
            </field>
            <field name="rooms" type="string" collection="arraylist">
                <bind-xml name="Rooms" node="element"></bind-xml>
            </field>
            <field name="floors" type="string" collection="vector">
                <bind-xml name="Floors" node="element"></bind-xml>
            </field>
            <field name="dob" type="date">
                <bind-xml name="building-date" node="element"></bind-xml>
            </field>
            <field name="branchName" type="string">
                <bind-xml name="branch_name" node="attribute"></bind-xml>
            </field>
            <field name="numberOfWorkers" type="integer">
                <bind-xml name="number_of_workers" node="element"></bind-xml>
            </field>
            <field name="map" collection="map"> <!-- Birinci map java kısmındaki HashMap objesinin adı, ikincisi ise collection tipi(Yani bildiğimiz java.util.Hashmap'ın kısaltması) -->
                <bind-xml name="mappp" node="element">
                <class name="org.exolab.castor.mapping.MapItem"> <!-- içiçe sınıf -->
                    <field name="key" type="java.lang.String">  <!-- hashmap key'i -->
                        <bind-xml name="key"/>
                    </field>
                    <field name="value" type="Branch"/>  <!-- Hashmap'ta tutulan obje -->
                </class>
                </bind-xml>
            </field>
        </class>               
            <class name="Branch"> <!-- Branch sınıfı tanımlaması -->
                <map-to xml="Branch"></map-to>
                <field name="branchName" type="string">
                    <bind-xml name="branch_name" node="element"></bind-xml>
                </field>
                <field name="numberOfWorkers" type="integer">
                    <bind-xml name="number_of_workers" node="element"></bind-xml>
                </field>
            </class>
</mapping>


Kodları koymuyorum fakat aklınıza takılan herhangi birşey olursa sorabilirsiniz. Şimdilik bu kadar, kolay gelsin.