-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 
Author Message
 Post subject: bidirection @OneToMany with inconsistent result?
PostPosted: Fri Jan 06, 2006 8:40 pm 
Newbie

Joined: Wed Nov 02, 2005 10:49 pm
Posts: 12
Under Hibernate Core 3.1 + Hibernate Annotation 3.1 beta 7

Two annotated entity with composite key: Sales(master, with FormPk) and SalesItem(detail, with FormItemPk)

Code:

@Embeddable(access = AccessType.FIELD)
public class FormPk implements Serializable {
   
    private String formType;
    private String formNo;
   
    public FormPk() {
    }
   
    public FormPk(String formType, String formNo) {
        this.formType = formType;
        this.formNo = formNo;
    }
   
    public String getFormType() {
        return formType;
    }
   
    public void setFormType(String formType) {
        this.formType = formType;
    }
   
    public String getFormNo() {
        return formNo;
    }
   
    public void setFormNo(String formNo) {
        this.formNo = formNo;
    }

    @Override
    public int hashCode() {
        int typeHash = (formType != null) ? formType.hashCode() : 0;
        int noHash = (formNo != null) ? formNo.hashCode() : 0;
        return typeHash + noHash;
    }
   
    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (!(obj instanceof FormPk)) return false;
        if (formType == null || formNo == null) return false;
        FormPk pk = (FormPk)obj;
        return formType.equals(pk.formType) && formNo.equals(pk.formNo);
    }

}

@Entity(access = AccessType.FIELD)
@Table(name = "COPTG")
public class Sales implements Serializable {
   
    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name = "formType", column = @Column(name = "TG001")),
        @AttributeOverride(name = "formNo", column = @Column(name = "TG002"))
    })
    private FormPk pk;
   
    @OneToMany
    @JoinColumns({
        @JoinColumn(name = "TH001", referencedColumnName = "TG001"),
        @JoinColumn(name = "TH002", referencedColumnName = "TG002")
    })
    private Set<SalesItem> salesItems;
   
    public FormPk getPk() {
        return pk;
    }
   
    public void setPk(FormPk pk) {
        this.pk = pk;
    }
   
    public Set<SalesItem> getSalesItems() {
        return salesItems;
    }

}

@Embeddable(access = AccessType.FIELD)
public class FormItemPk implements Serializable {

    private String formType;
    private String formNo;
    private String itemNo;
   
    public FormItemPk() {
    }
   
    public FormItemPk(String formType, String formNo, String itemNo) {
        this.formType = formType;
        this.formNo = formNo;
        this.itemNo = itemNo;
    }
   
    public String getFormType() {
        return formType;
    }
   
    public void setFormType(String formType) {
        this.formType = formType;
    }
   
    public String getFormNo() {
        return formNo;
    }
   
    public void setFormNo(String formNo) {
        this.formNo = formNo;
    }
   
    public String getItemNo() {
        return itemNo;
    }
   
    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }
   
    @Override
    public int hashCode() {
        int typeHash = (formType != null) ? formType.hashCode() : 0;
        int noHash = (formNo != null) ? formNo.hashCode() : 0;
        int itemHash = (itemNo != null) ? itemNo.hashCode() : 0;
        return typeHash + noHash + itemHash;
    }
   
    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (!(obj instanceof FormItemPk)) return false;
        if (formType == null || formNo == null || itemNo == null) return false;
        FormItemPk pk = (FormItemPk)obj;
        return formType.equals(pk.formType) && formNo.equals(pk.formNo) && itemNo.equals(pk.itemNo);
    }

}

@Entity(access = AccessType.FIELD)
@Table(name = "COPTH")
public class SalesItem implements Serializable {
   
    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name = "formType", column = @Column(name = "TH001")),
        @AttributeOverride(name = "formNo", column = @Column(name = "TH002")),
        @AttributeOverride(name = "itemNo", column = @Column(name = "TH003"))
    })
    private FormItemPk pk;
   
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="TH001", referencedColumnName="TG001", insertable = false, updatable = false),
        @JoinColumn(name="TH002", referencedColumnName="TG002", insertable = false, updatable = false)
    })
    private Sales sales;
   
    public FormItemPk getPk() {
        return pk;
    }
   
    public void setPk(FormItemPk pk) {
        this.pk = pk;
    }
   
    public Sales getSales() {
        return sales;
    }
   
}



when I navigate from SalesItem to Sales(by invoking aSalesItem.getSales()), I got exactly one result, but when I navigate from Sales to SalesItem(by invoking aSales.getSalesItems()), the result is empty why?


Top
 Profile  
 
 Post subject: Sorry to lost some useful information
PostPosted: Fri Jan 06, 2006 8:51 pm 
Newbie

Joined: Wed Nov 02, 2005 10:49 pm
Posts: 12
regarding to aSales.getSalesItems() return empty result, I catch corresponding sql command:

Hibernate: select salesitems0_.TH001 as TH1_1_, salesitems0_.TH002 as TH2_1_, salesitems0_.TH003 as TH3_1_, salesitems0_.TH001 as TH1_2_0_, salesitems0_.TH002 as TH2_2_0_, salesitems0_.TH003 as TH3_2_0_ from COPTH salesitems0_ where salesitems0_.TH001=? and salesitems0_.TH002=?
Sales Item count = 0

Why TH001, TH002, TH003 all retrived twice?


Top
 Profile  
 
 Post subject: Does Connection.setTypeMap(Map) relative?
PostPosted: Sat Jan 07, 2006 10:09 pm 
Newbie

Joined: Wed Nov 02, 2005 10:49 pm
Posts: 12
I'm using jtds 1.2 Jdbc driver,
when I turn the log on, I found following exception repeated

Code:
java.sql.SQLException: The Connection.setTypeMap(Map) method is not implemented.
   at net.sourceforge.jtds.jdbc.ConnectionJDBC2.notImplemented(ConnectionJDBC2.java:1519)
   at net.sourceforge.jtds.jdbc.ConnectionJDBC2.setTypeMap(ConnectionJDBC2.java:2123)
   at com.mchange.v2.c3p0.impl.NewPooledConnection.reset(NewPooledConnection.java:290)
   at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:247)
   at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1148)
   at org.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:42)
   at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:343)
   at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:298)
   at org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:187)
   at org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:233)
   at org.hibernate.impl.SessionImpl.afterOperation(SessionImpl.java:429)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1098)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
   at com.simplbug.zappy.htlgm.persistence.cosmos.Try.main(Try.java:22)


Because I trie the same code under MySQL with no problem.... maybe the problem comes from driver?


Top
 Profile  
 
 Post subject: the problem still exists...
PostPosted: Sun Jan 08, 2006 2:35 am 
Newbie

Joined: Wed Nov 02, 2005 10:49 pm
Posts: 12
After replacing the jTDS driver with Microsoft JDBC Driver, the result is still inconsist without any exception.

Is there any one meets the same problem, please give me a hand.
thanks a lot!!


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 12, 2006 2:38 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
one side has to be mappedBy

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.