-->
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.  [ 7 posts ] 
Author Message
 Post subject: EJB works fine in OC4J but not in Jboss
PostPosted: Fri Dec 01, 2006 3:30 pm 
Beginner
Beginner

Joined: Tue Aug 23, 2005 4:59 pm
Posts: 31
I have a query that works fine in OC4J (I am developing in JDeveloper) and when I deploy it to Jboss 4.05GA I get an error on deployment.

Code:

12:11:52,405 ERROR [SessionFactoryImpl] Error in named query: Users.findAllByProviderIdorg.hibernate.QueryException: could not resolve property: providerId of: org.usiis.model.ProviderUsers [select o from org.usiis.model.Users o Where o.providerUsersList2.providers.providerId = :providerId order by o.username]
        at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyE




Here are the EJBs in question

Code:

package org.usiis.model;

import java.io.Serializable;

import java.sql.Timestamp;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.NamedQueries;
import javax.persistence.OneToMany;

@Entity
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "select o from Users o"),

@NamedQuery(name = "Users.findOneByUsernamePasswordProvider",
    query = "select o from Users o Where " +
    "o.username = :username " +
    "AND o.password = :password " +
    "AND o.providerUsersList2.providers.providerId = :providerId"),
   
@NamedQuery(name = "Users.findAllByProviderId",
    query = "select o from Users o Where o.providerUsersList2.providers.providerId = :providerId order by o.username")   
   
})
public class Users implements Serializable {
    @Column(name="DATE_CREATED", nullable = false)
    private Timestamp dateCreated;
    @Column(name="DATE_END")
    private Timestamp dateEnd;
    private Timestamp dob;
    @Column(name="FIRST_NAME", nullable = false)
    private String firstName;
    @Column(name="LAST_NAME", nullable = false)
    private String lastName;
    @Column(name="MIDDLE_NAME")
    private String middleName;
    private String note;
    @Column(name="OCCUPATION_CODE")
    private String occupationCode;
    private String password;
    @Column(name="PASSWORD_EXPIRE_DATE")
    private Timestamp passwordExpireDate;
    private String username;
    @Id
    @Column(name="USER_ID", nullable = false)
    private Long userId;
    @OneToMany(mappedBy = "users")
    private List<ProviderUserServices> providerUserServicesList;
    @OneToMany(mappedBy = "users")
    private List<UsersGlobal> usersGlobalList;
    @OneToMany(mappedBy = "users1")
    private List<ProviderUserServices> providerUserServicesList1;
    @OneToMany(mappedBy = "users1")
    private List<UsersGlobal> usersGlobalList1;
    @ManyToOne
    @JoinColumn(name = "PRIMARY_PROVIDER_ID", referencedColumnName = "PROVIDER_ID")
    private Providers providers;
    @OneToMany(mappedBy = "users")
    private List<ProviderUsers> providerUsersList;
    @OneToMany(mappedBy = "users1")
    private List<ProviderUsers> providerUsersList1;
    @OneToMany(mappedBy = "users")
    private List<ProviderUserFuncs> providerUserFuncsList;
    @OneToMany(mappedBy = "users1")
    private List<ProviderUserFuncs> providerUserFuncsList1;
    @OneToMany(mappedBy = "users")
    private List<ProviderUserRoles> providerUserRolesList;
    @ManyToOne
    @JoinColumn(name = "ENDED_BY", referencedColumnName = "USER_ID")
    private Users users;
    @OneToMany(mappedBy = "users")
    private List<Users> usersList;
    @OneToMany(mappedBy = "users1")
    private List<ProviderUserRoles> providerUserRolesList1;
    @OneToMany(mappedBy = "users2")
    private List<UsersGlobal> usersGlobalList2;
    @ManyToOne
    @JoinColumn(name = "CREATED_BY", referencedColumnName = "USER_ID")
    private Users users1;
    @OneToMany(mappedBy = "users1")
    private List<Users> usersList1;
    @OneToMany(mappedBy = "users2")
    private List<ProviderUserServices> providerUserServicesList2;
    @OneToMany(mappedBy = "users2")
    private List<ProviderUsers> providerUsersList2;




Code:
package org.usiis.model;

import java.io.Serializable;

import java.sql.Timestamp;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@NamedQuery(name = "ProviderUsers.findAll",
    query = "select o from ProviderUsers o")
@Table(name = "PROVIDER_USERS")
public class ProviderUsers implements Serializable {
    @Column(name="ACCESS_GROUP_ID")
    private Long accessGroupId;
    @Column(name="DATE_END")
    private Timestamp dateEnd;
    @Column(name="DATE_START")
    private Timestamp dateStart;
    private String note;
    @Id
    @Column(name="PROVIDER_USER_ID", nullable = false)
    private Long providerUserId;
    @OneToMany(mappedBy = "providerUsers")
    private List<ProviderUserRoles> providerUserRolesList;
    @ManyToOne
    @JoinColumn(name = "PROVIDER_ID", referencedColumnName = "PROVIDER_ID")
    private Providers providers;
    @ManyToOne
    @JoinColumn(name = "ENDED_BY", referencedColumnName = "USER_ID")
    private Users users;
    @ManyToOne
    @JoinColumn(name = "STARTED_BY", referencedColumnName = "USER_ID")
    private Users users1;
    @OneToMany(mappedBy = "providerUsers")
    private List<ProviderUserServices> providerUserServicesList;
    @OneToMany(mappedBy = "providerUsers")
    private List<ProviderUserContactInfo> providerUserContactInfoList;
    @OneToMany(mappedBy = "providerUsers")
    private List<ProviderUserFuncs> providerUserFuncsList;
    @ManyToOne
    @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
    private Users users2;



Code:
package org.usiis.model;

import java.io.Serializable;

import java.sql.Timestamp;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

@Entity
@NamedQuery(name = "Providers.findAll", query = "select o from Providers o order by o.providerName")
public class Providers implements Serializable {
    @Column(name="ACCESS_MY_DATA_FLAG")
    private String accessMyDataFlag;
    @Column(name="ACTIVE_FLAG")
    private String activeFlag;
    @Column(name="ADDRESS_CITY", nullable = false)
    private String addressCity;
    @Column(name="ADDRESS_STATE", nullable = false)
    private String addressState;
    @Column(name="ADDRESS_STREET", nullable = false)
    private String addressStreet;
    @Column(name="ADDRESS_ZIP", nullable = false)
    private String addressZip;
    @Column(name="AUTHENT_SOURCE_CODE", nullable = false)
    private String authentSourceCode;
    @Column(name="COUNTY_CODE", nullable = false)
    private String countyCode;
    @Column(name="DATE_CREATED")
    private Timestamp dateCreated;
    @Column(name="DATE_ENDED")
    private Timestamp dateEnded;
    @Column(name="DATE_ENROLLED")
    private Timestamp dateEnrolled;
    @Column(name="DATE_MODIFIED")
    private Timestamp dateModified;
    @Column(name="FAX_NUMBER")
    private String faxNumber;
    private String memo;
    private String npi;
    @Column(name="PHONE_NUMBER")
    private String phoneNumber;
    @Column(name="POSTCARD_FLAG")
    private String postcardFlag;
    @Id
    @Column(name="PROVIDER_ID", nullable = false)
    private String providerId;
    @Column(name="PROVIDER_NAME", nullable = false)
    private String providerName;
    @Column(name="PROVIDER_TYPE_CODE", nullable = false)
    private String providerTypeCode;
    @Column(name="VFC_PIN")
    private String vfcPin;
    @OneToMany(mappedBy = "providers")
    private List<ProviderUsers> providerUsersList;
    @OneToMany(mappedBy = "providers")
    private List<Users> usersList;



Anyone know why this would work in OC4J but not JBoss? basicly it is looking for providerId in providerUsers but that is a mapped relationship.

Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 04, 2006 1:18 pm 
Beginner
Beginner

Joined: Tue Aug 23, 2005 4:59 pm
Posts: 31
Can anyone help here? Why is it looking for providerId in ProviderUsers pojo, when it should be looking in Providers pojo?


Is the hibernate validator not reading this line correctly?

@JoinColumn(name = "PROVIDER_ID", referencedColumnName = "PROVIDER_ID")

?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 04, 2006 5:08 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
providerUsersList2.providers is not allowed since providerUsersList2 is a list. you have to use an explicit left join in HQL

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 06, 2006 12:44 pm 
Beginner
Beginner

Joined: Tue Aug 23, 2005 4:59 pm
Posts: 31
I don't quite follow you? Is the join in the query incorrect? Or is the mapping incorrect?

How do I explicitly tell it to join to provider_id?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 06, 2006 3:42 pm 
Beginner
Beginner

Joined: Tue Aug 23, 2005 4:59 pm
Posts: 31
Basically the query that I am trying to preform is this.

Select user_id from users u, provider_users pu, providers p
where
u.user_id = pu.user_id AND
pu.provider_id = p.provider_id AND
p.provider_id = 1


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 06, 2006 4:35 pm 
Senior
Senior

Joined: Tue Jul 25, 2006 9:05 am
Posts: 163
Location: Stuttgart/Karlsruhe, Germany
Hi Eric,

I seems that you have at least a basic knowledge of SQL, so you need to think of ANSI joins. These are joins that are not done in the in the where clause like you have posted, but like so:

Code:
SELECT ......... FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.id = t2.table1_fk ......... WHERE t1.id > 10


The joins in EJBQL are very similar to above (no need for the ON part of the join)

Have a look here http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/objectstate.html#d0e704

If you can't manage to get it working, i will try and find the time to post the code for a very simple example.


Cheers,

Andy

_________________
Rules are only there to be broken


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 06, 2006 6:31 pm 
Beginner
Beginner

Joined: Tue Aug 23, 2005 4:59 pm
Posts: 31
Thanks for the link! I will post back with results.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 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:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.