Netbeans 8.2 kullanılarak EclipseLink ile oracle veritabaninda farklı schema altındaki(Farklı kullanıcı adı ve şifre ) ilişkilindirilmiş tabloların entity classlarını nasil generate edebilirim?

Ornek :

x tablosu k scheması altında (x tablosu k kullanıcısına ait) y tablosu j scheması altında (y tablosu j kullanıcısına ait)

x tablosu y tablosu ile ilşkili (x tablosunun primary key' i y tablosunun foreignkey'i )

Netbeans de "create entity class from database" seçeneği ile generete ettiğimde schemalar farklı olduğunda ayrı ayrı jndi' ler oluştururarak generete edebiliyorum. Fakat tablolar arasındaki ilişkiler oluşmuyor. Aynı schema altındaki tablolarda ilişkiler otomatik oluşuyor(Join ,OnetoOne,Manytomany gibi). Bu problemin çözümü için önerebileceğiniz birşey var mı?

Şimdiden teşekkürler.

soruldu: 08 May '15, 09:53

mtezgider's gravatar image

mtezgider
515710
cevap kabul oranı: 0%

değiştirildi: 08 May '15, 09:56

RDBMS için oluşturan entity'leriniz ilişkilerini IDE'ye bırakmanız hatalı bir yaklaşım. Kendiniz bunu oluşturmalısınız bu sayedede tablolar arasındaki ilişkinin entity'ler arasında nasıl kullanılacağını öğrenirsiniz, hangi durumda eager hangi durumda lazy gerekli olduğunun kararınıda siz vermiş olursunuz. @cemIkta hocamız bunu belirttiği gibi İkinci bir db şeması için persistence içinde tanımlama yapabilirsiniz fakat bu iki ayrı Session pool'u yaratmanız anlamına gelmektedir. Yönetiminin zor olacağı kanatindeyim. Tek bir datasource yönetimi özellikle eş zamanlı transaction için daha rahattır.

(08 May '15, 15:50) Turgay Can Turgay%20Can's gravatar image

@CemIkta hocam yanlış anlamadıysam iki farklı şema altındaki tablolarda foreign key ilişkilieri mevcut eğer bu şekilde ise aşağıdaki şekilde kullanımda herhangi bir sıkıntı yaşamıyorum ve şuanda çalışıyor. Sadece @Table kısmında schema tanımlanması yeterlidir. Oracle tarafında da gerekli erişim yetkilerinin tanımlanması gerekiyor.

@Entity
@Table(name = "BIRIMLER", schema = "BUTCE")
public class Birimler implements java.io.Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -3664428526146494608L;
    // Fields

    private Long id;
    private Long kod;
    private Long kurumOrgId;
    private String tanim;
    private String organizasyonKodu;
    private Long onaySeviye;
    private Boolean aktif;

....

//getter/setter

}

@Entity
@Table(name = "FIS", schema = "SATINALMA")
public class IhtiyacFisi extends BaseEntity implements java.io.Serializable {

/**
 *
 */
private static final long serialVersionUID = 8471192524047824176L;
// Fields

private Long id;
private Birimler harcamaBirimi;
private Date talepTarihi;

...

..

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "HARCAMA_BIRIMI_ID")
public Birimler getHarcamaBirimiId() {
    return this.harcamaBirimiId;
}

public void setHarcamaBirimiId(Birimler harcamaBirimiId) {
    this.harcamaBirimiId = harcamaBirimiId;
}

...

.. }

permanent link

cevaplandı: 11 May '15, 03:03

kurtomerfaruk's gravatar image

kurtomerfaruk
1.3k222940
cevap kabul oranı: 30%

1

@kurtomerfaruk @mtezgider Bu durumda NetBeans veritabani baglantisi tanimlarken Schema sectigi icin sadece bir Schema'dan entity'leri olusturuyor sanirim, ama elle kodlamak mumkun gorunuyor.

(11 May '15, 17:15) CemIkta ♦ CemIkta's gravatar image

Öncelikle burda bir mantik hatasi var gibi duruyor. Teorik olarak veritabanlarindaki Schema'lar aslinda ikinci bir veritabani gibidir. MySQL'de genelde varsayilan Schema kullanilir, ama PostgreSQL, DB2 ve Oracle gibi veritabanlarinda bir veritabani icinde birden cok Schema'lar kullanilabilir / kullanilir.

Öncelikle cevap bulmaniz gereken sorular:

  • Bir veritabani icindeki her bir Schema ayri bir yapida mi olmali? (Schema'larin farkliliklari vs. yonetimi nasil yapiliyor / yapilmali?)
  • Eger bir veritabani icindeki Schema'lar birbirinden farkli ise neden yeni bir veritabani kullanilmiyor?
  • Java projesi birbiriyle uyumlu olmayan veritabani Schema'lariyla nasil calismali?

JPA her bir veritabani Schema'sini farkli bir veritabani gibi görür, o yüzden NetBeans IDE icinde veritabani baglantisi olusturdugunuzda, Schema ismi sorar, Schema yoksa varsayilan Schema alinir. Teorik olarak birden cok Schema'ya persistence.xml icinde persistence unit tanimlamasi yaparak baglanabilirsiniz, ama birden cok veritabani veya Schema'ya baglanmak performans acisindan pek tavsiye edilmez! EntityManager ve Transactions yonetiminde dikkatli olmaniz gerekir, her bir veritabani veya Schema icin farkli EntityManager tanimlamaniz gerekir. Schema'lar birbiriyle sync olarak calismaz!

Genelde bir veritabani ve birden cok Schema yapilari (butun Schema'larin yapisi aynidir!) sistemde degisik yetkilendirmelerle birbirinden izole edilmis testler yapilmak icin kullanilir. Boylece her test yapan kisi farkli Schema'da calisarak degisik test datalari girer, degisik turde testler yapar vs. vs.

Kisaca farkli veritabanlarini veya farkli Schema'lari JPA ile relations tanimlayarak kullanamassiniz!

@kurtomerfaruk arkadasin cevabinda belirttigi gibi @Table schema parametresi ile kullanilabiliyor. Bugun detayli dokumanlara baktim, catalog veya schema parametre olarak verilebiliyormus!

permanent link

cevaplandı: 08 May '15, 12:10

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

değiştirildi: 11 May '15, 17:19

Merhaba hocam, öncelikle cevabınız için teşekür ederim. Var olan bir veri tabanına kullanmam gerektiği için yeni bir veri tabanı oluşturup tek schemada yöneteme imkanım yok. Oracle'da schemalar belli kullanıcılara belli yetkilere göre erişim için yapılandırılmış.Benim anladığım, eğer yanlış biliyorsam düzeltin lütfen. Aslında her kullanıcının bir scheması var, kullanıcının kendi oluşturduğu tablolar bu schemanın altında , bir de başka schemalardaki(farklı kullanıcıların ) bazı tablolarını yönetme yetkileri var. Bu tablolar birbirleri ile yukarıda verdiğim örnekteki gibi ilişkililer.Dolayısıyla kullanıcının hem kendi scheması altında kendisinin oluşturduğu ve başka shemalar altında eriştiği yetkili oldugu tablolar var. Normal sql sorgusu yazdığımda aynı schemadaymış gibi tabloları join yapabiliyorum. Çünkü yetkiler verilmiş. (select * from x,y where x.id=y.id gibi). Fakat Jpa kullanarak bu tabloların entitylerini aynı kolaylıkla ilişkili yapamadım. Çünkü netbeans connetion sağlarken dediğiniz gibi schema seçmemizi istiyor. Ve bir schemayı seçebildiğimizden dolayısı ile diğer schemada olup da ilişki olan tablolar listelenmediği için ilişkileri otomatik oluşturamıyoruz. Otomatik olmasa da diğer schemalardaki yetkisi olan tablolara erişebilip ilişkilendirilebiliyor olması lazım diye düşünüyorum.

(08 May '15, 13:04) mtezgider mtezgider's gravatar image
1

@mtezgider dedigin sekilde kullanıyorum fakat JPA değilde hibernate de herhangi bir problem yaşamıyorum. Asıl bağlanmam gerek şemanın kullanıcısı ile bağlandığımda diğer şemada yetkim var ise direk işlem yapabiliyorum. Hibernate tarafında ekstra birşey tanımlamıyorum sadece oracle tarafında kullanıcı yetkilendirme ayarlarının doğru yapılması yeterli oluyor.

(08 May '15, 16:10) kurtomerfaruk kurtomerfaruk's gravatar image

@kurtomerfaruk bir veritabanina baglanip schema'larda islem yapmak baska, bir veritabaninin 2 farkli schema'sindaki tablolara foreign key tanimlamak baska. Eger relations tanimlamak istiyorsan bildigim kadariyla 2 table'da o veritabani schema'sinda olmali! Eger bu sekilde kullaniyorsaniz kucuk bir ornek paylasirsaniz faydali olur.

(09 May '15, 16:09) CemIkta ♦ CemIkta's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×86
×50
×10
×1

Soruldu: 08 May '15, 09:53

Görüntüleme: 506 kez

Son güncelleme: 11 May '15, 17:19

powered by BitNami OSQA