hibernate custom junction table

Esmaeil
پست: 8
تاریخ عضویت: یک شنبه 19 مرداد 1399, 9:02 pm

hibernate custom junction table

پست توسط Esmaeil » سه شنبه 21 مرداد 1399, 1:05 pm

سلام
من میخوام یک custom junction table با فیلد های اضافه در hibernate و spring mvc + hibernate بسازم و برای این کار فرضا بین 2 جدول یک جدول سوم که جداول اصلی با جدول junction رابطه one2many دارند ایجاد میکنم ولی با اجرای برنامه جدول junction در دیتابیس ایجاد نمیشه بعد رابطه رو دو طرفه میکنم یعنی دو رابطه one2many با جدول junction و رابطه many2one از جدول junction با جداول اصلی ایجاد میکنم ولی باز جدول junction در دیتابیس که اوراکل 18c هست ایجاد نمیشود آیا برای ایجاد junction table از annotation خاص و یا تنظیمات خاصی در فایل spring.xml و یا web.xml باید وارد شود و یا اینکه تنظیمات خاصی در دیتابیس باید وارد کنیم؟؟؟
با تشکر...

java2
مدیر کل سایت
پست: 178
تاریخ عضویت: پنج شنبه 13 دی 1397, 6:49 pm

Re: hibernate custom junction table

پست توسط java2 » پنج شنبه 23 مرداد 1399, 11:53 pm

با سلام رابطه از سمت جدول میانی تعریف کنید.

Esmaeil
پست: 8
تاریخ عضویت: یک شنبه 19 مرداد 1399, 9:02 pm

Re: hibernate custom junction table

پست توسط Esmaeil » سه شنبه 4 شهریور 1399, 2:39 pm

با عرض سلام و ادب
در ادامه سوال قبل که مشکل رو نتونستم حل کنم تمامی حالات ممکن رو پیاده سازی کردم ولی نشد آیا برای ایجاد جداول junction باید property ، mappingResource تعریف شود اگر باید تعریف شود پس چگونه باید مقدار دهی کنیم اگر مقدور باشد ممنون می شوم هم برای jpa و هم برای spring تنظیمات آن را نشان دهید با تشکر

java2
مدیر کل سایت
پست: 178
تاریخ عضویت: پنج شنبه 13 دی 1397, 6:49 pm

Re: hibernate custom junction table

پست توسط java2 » سه شنبه 4 شهریور 1399, 7:05 pm

با سلام
قصد پیاده سازی این سناریو خواهد بود.

کد: انتخاب همه

SQL> select * from document;

        ID DOCUMENTTYPE             CAR_ID  PERSON_ID
---------- -------------------- ---------- ----------
         5 pc1                           3          2
         6 pc2                           4          1
         7 pc3                           3          1

SQL> select * from person;

        ID NAME
---------- --------------------
         1 person1
         2 person2

SQL> select * from car;

        ID MODEL
---------- --------------------
         3 car1
         4 car2 
ساختار Entity ها

کد: انتخاب همه


package model.entity;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity(name="car")
public class Car {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(columnDefinition = "VARCHAR2(20)")
    private String model;
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "car_id")
    private List<Document> documentList=new ArrayList<Document>();

    public List<Document> getDocumentList() {
        return documentList;
    }

    public long getId() {
        return id;
    }

    public void setDocumentList(List<Document> documentList) {
        this.documentList = documentList;
    }

    public String getModel() {
        return model;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setModel(String model) {
        this.model = model;
    }
}


package model.entity;

import javax.persistence.*;

@Entity(name = "document")
public class Document {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(columnDefinition = "VARCHAR2(20)")
    private String documentType;

    public long getId() {
        return id;
    }

    public String getDocumentType() {
        return documentType;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setDocumentType(String documentType) {
        this.documentType = documentType;
    }
}


package model.entity;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


@Entity(name = "person")
public class Person implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column (columnDefinition = "VARCHAR2(20)")
    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "person_id")
    private List<Document> documentList=new ArrayList<Document>();

    public long getId() {
        return id;
    }

    public List<Document> getDocumentList() {
        return documentList;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setDocumentList(List<Document> documentList) {
        this.documentList = documentList;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}



Esmaeil
پست: 8
تاریخ عضویت: یک شنبه 19 مرداد 1399, 9:02 pm

Re: hibernate custom junction table

پست توسط Esmaeil » سه شنبه 4 شهریور 1399, 8:09 pm

با عرض سلام وادب و ممنون که وقت گذاشتین
من همین کد رو میزنم ولی خطای زیر رخ میده و وقتی به دیتابیس مراجعه میکنم جدول ایجاد نشده
Exception in thread "main" org.hibernate.exception.SQLGrammarException: ORA-01747: invalid user.table.column, table.column, or column specification

at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at com.sun.proxy.$Proxy29.executeQuery(Unknown Source)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1978)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2175)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:61)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:622)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1606)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:379)
at org.hibernate.collection.internal.AbstractPersistentCollection.write(AbstractPersistentCollection.java:208)
at org.hibernate.collection.internal.PersistentBag.add(PersistentBag.java:291)
at ir.model.repository.DocumentRepository.addDocument(DocumentRepository.java:50)
at ir.model.service.DocumentService.addDocument(DocumentService.java:35)
at ir.model.service.DocumentService$$FastClassBySpringCGLIB$$ef0dadf7.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at ir.model.service.DocumentService$$EnhancerBySpringCGLIB$$198b2434.addDocument(<generated>)
at ir.Main.main(Main.java:21)
Caused by: java.sql.SQLSyntaxErrorException: ORA-01747: invalid user.table.column, table.column, or column specification

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1034)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3867)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1502)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
... 27 more


دیتابیس
select * from document;
select * from document
*
ERROR at line 1:
ORA-00942: table or view does not exist

java2
مدیر کل سایت
پست: 178
تاریخ عضویت: پنج شنبه 13 دی 1397, 6:49 pm

Re: hibernate custom junction table

پست توسط java2 » چهار شنبه 5 شهریور 1399, 1:29 pm

نمونه به ایمیل شما ارسال شد.

Esmaeil
پست: 8
تاریخ عضویت: یک شنبه 19 مرداد 1399, 9:02 pm

Re: hibernate custom junction table

پست توسط Esmaeil » چهار شنبه 5 شهریور 1399, 2:41 pm

استاد بسیار بسیار متشکرم که وقت گذاشتید واقعا نمیدونم چطور تشکر کنم فقط یک مشکل کوچولو دارم اونم اینه که وقتی از spring استفاده میکنم این مشکل پیش میاد باز هم خیلی تشکر میکنم و هم خیلی پوزش می طلبم از اینکه وقتتون رو گرفتم با این همه دغدغه و فعالیت و مشکلات

younesspr
پست: 7
تاریخ عضویت: پنج شنبه 10 مرداد 1398, 4:28 pm

Re: hibernate custom junction table

پست توسط younesspr » پنج شنبه 6 شهریور 1399, 4:26 pm

سلام و عرض ادب
من هم همین مشکل رو دارم
داخل برنامه کد های sql هایبرنیت چاپ میشه و ظاهرا جداول مورد نظرم داخل پایگاه داده درست میشه اما وقتی میخوام اطلاعات وارد جدول کنم خطای
java.sql.SQLSyntaxErrorException: ORA-01747: invalid user.table.column, table.column, or column specification
رو دریافت میکنم
متاسفانه هرچی دنبالش گشتم نتونستم راه حلی براش پیدا کنم
وقتی با استفاده از هایبرنیت مشابه کدی که شما زدین رو وارد میکنم جدولی داخل پایگاه داده ام درست نمیشه
مشکل دیگه ای که دارم اینه که وقتی انوتیشن Entity رو بالای کلاسم قرار میدم از org.hibernate.annotations.Entity انوتیشن رو ایمپورت میکنه
ن از javax.persistence و مجبور میشم خودم به صورت دستی persistence رو ایمپورت کنم
تنظیمات Hibernate (JPA) Configuration رو هم درست وارد کردم
نمیدونم مشکل از کجاست
ممنون میشم راهنماییم کنید
پیوست ها
Annotation 2020-08-27 162112.jpg
Annotation 2020-08-27 162112.jpg (253.83 کیلو بایت) مشاهده 4409 مرتبه

java2
مدیر کل سایت
پست: 178
تاریخ عضویت: پنج شنبه 13 دی 1397, 6:49 pm

Re: hibernate custom junction table

پست توسط java2 » شنبه 8 شهریور 1399, 12:40 am

ساختار entity های خود را بویسله تگ code در انجمن قرار دهید

younesspr
پست: 7
تاریخ عضویت: پنج شنبه 10 مرداد 1398, 4:28 pm

Re: hibernate custom junction table

پست توسط younesspr » شنبه 8 شهریور 1399, 11:34 am

کد: انتخاب همه

package Project.model.entity;

import javax.persistence.*;


@Entity
@Table(name = "Products")
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(columnDefinition = "NUMBER")
    private Long p_id;
    @Column(columnDefinition = "VARCHAR2(20)")
    private String p_name;
    @Column(columnDefinition = "NUMBER")
    private Long expire;
    @Column(columnDefinition = "NUMBER")
    private Long number;
    @Column(columnDefinition = "NUMBER")
    private Long cost;

    public Long getP_id() {
        return p_id;
    }

    public Product setP_id(Long p_id) {
        this.p_id = p_id;
        return this;
    }

    public String getP_name() {
        return p_name;
    }

    public Product setP_name(String p_name) {
        this.p_name = p_name;
        return this;
    }

    public Long getExpire() {
        return expire;
    }

    public Product setExpire(Long expire) {
        this.expire = expire;
        return this;
    }

    public Long getNumber() {
        return number;
    }

    public Product setNumber(Long number) {
        this.number = number;
        return this;
    }

    public Long getCost() {
        return cost;
    }

    public Product setCost(Long cost) {
        this.cost = cost;
        return this;
    }

    public Product(String p_name, Long expire, Long number, Long cost) {
        this.p_name = p_name;
        this.expire = expire;
        this.number = number;
        this.cost = cost;
    }

    public Product(Long p_id, String p_name, Long expire, Long number, Long cost) {
        this.p_id = p_id;
        this.p_name = p_name;
        this.expire = expire;
        this.number = number;
        this.cost = cost;
    }

    public Product() {
    }
}


ارسال پست