Hibernate + Sybase

Hibernate + Sybase - Java - Programmation

Marsh Posté le 27-12-2004 à 19:47:56    

Bonjour,  
 
j'utilise hibernate avec Sybase ASE, je voudrais récupérer les données d'une table, mais hibernate me retourne une erreur:  
 
The column prefix 'area1_' does not match with a table name or alias name used in the query. Either the table is not specified in the FROM clause or it has a correlation name which must be used instead.  
 
je ne vois pas d'où cela peut venir!  
 
 
merci

Reply

Marsh Posté le 27-12-2004 à 19:47:56   

Reply

Marsh Posté le 27-12-2004 à 21:06:58    

he ben et nous tu crois qu'on va voir comment?
t'as regardé tes logs, les queries generées par hibernate, la config ... ? [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 09:05:37    

area1_ ca correspond à quoi un champ du bean que tu veux mapper à ta table , une colonne de ta table ?  
 
un peu plus d'explications et de log ca pourrait aider

Reply

Marsh Posté le 28-12-2004 à 09:11:26    

colles nous ta requete, ton fichier de mapping et le schema de ta base, je pourrais suremment t'aider

Reply

Marsh Posté le 28-12-2004 à 09:48:49    

voila le fichier de conf d'hibernate:
 
<hibernate-configuration>
 <session-factory>
  <!-- properties -->
  <property name="connection.username">sa</property>
  <property name="show_sql">true</property>
  <property name="dialect">
   net.sf.hibernate.dialect.SQLServerDialect
  </property>
  <property name="use_outer_join">true</property>  
         etc..
 </session-factory>
</hibernate-configuration>
 
le fichier de mapping de la table que je veux mapper:
<hibernate-mapping package="fr.lunasquare.admin.prospect.logic.area">
 <class name="Department" table="DEPARTMENT">
  <id     column="DEPARTMENT_ID"
   name="Id"
   type="integer">
   <generator class="native" />
  </id>
  <property
   column="NUMBER"
   length="5"
   name="Number"
   not-null="true"
   type="string"/>
     <many-to-one                                                  
 
                      class="fr.lunasquare.admin.prospect.logic.area.Area"
   name="Area"
   not-null="true">
    <column name="AREA_ID" />
  </many-to-one>
 </class>
</hibernate-mapping>

Reply

Marsh Posté le 28-12-2004 à 10:01:01    

faudrait ta requete et le bean aussi ...

Reply

Marsh Posté le 28-12-2004 à 10:27:14    

voici la requete générée:
 
select this.DEPARTMENT_ID as DEPARTME1_1_, this.NUMBER as NUMBER1_, this.AREA_ID as AREA_ID1_, area1_.AREA_ID as AREA_ID0_, area1_.COUNTRY_ID as COUNTRY_ID0_ from DEPARTMENT this left outer join AREA area1_ on this.AREA_ID=area1_.AREA_ID where 1=1
 
 
voici ce que j'execute:
 
 
public static void performAction(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
     
     try{
      _RootDAO.initialize("/hibernateConf/hibernate.cfg.xml" );
       
         List mesDepartments = DepartmentDAO.getInstance().findAll();
         for (ListIterator iter = mesDepartments.listIterator(); iter.hasNext();) {
          Department dep = (Department)iter.next();
          System.out.println("le departement :"+dep.getNumber());
         }
             
 }
     catch(HibernateException e){
      System.out.println("Une exception Hibernate s'est produite :" );
      System.out.println("Le message lié :"+e.getMessage());
      e.printStackTrace();
     }
    }

Reply

Marsh Posté le 28-12-2004 à 10:46:28    

ameliele a écrit :

voici la requete générée:
 
select this.DEPARTMENT_ID as DEPARTME1_1_, this.NUMBER as NUMBER1_, this.AREA_ID as AREA_ID1_, area1_.AREA_ID as AREA_ID0_, area1_.COUNTRY_ID as COUNTRY_ID0_ from DEPARTMENT this left outer join AREA area1_ on this.AREA_ID=area1_.AREA_ID where 1=1
 
 


 Je pense que t'as un probleme au niveau des packages, Department et Area sont bien tous les deux dans fr.lunasquare.admin.prospect.logic.area ? il va chercher ta table area ds un autre package.
Tu peux me poster le code de la methode departmentDAO.getInstance().findAll() ?


Message édité par sebi le 28-12-2004 à 11:11:50
Reply

Marsh Posté le 28-12-2004 à 10:56:15    

Department et Area sont bien dans le meme package
 
voici la methode findAll qui se trouve dans _BaseRootDAO
public java.util.List findAll () throws HibernateException {
  Session s = null;
  try {
   s = getSession();
      return findAll(s);
  }
  finally {
   closeSession();
  }
 }

Reply

Marsh Posté le 28-12-2004 à 11:21:48    

Mouais je seche un peu la, c'est chaud quand on a pas tout le code en main. Tu peux juste me poster ta classe Department, comme ca j'aurais patiquement tout en main

Reply

Marsh Posté le 28-12-2004 à 11:21:48   

Reply

Marsh Posté le 28-12-2004 à 11:25:58    

voici la classe department:
 
package fr.lunasquare.admin.prospect.logic.area;
 
import fr.lunasquare.admin.prospect.logic.area.baseValueObject.BaseDepartment;
 
/**
 * This is the object class that relates to the DEPARTMENT table.
 */
public class Department extends BaseDepartment {
 
/*[CONSTRUCTOR MARKER BEGIN]*/
 public Department () {
  super();
 }
 
 /**
  * Constructor for primary key
  */
 public Department (java.lang.Integer _id) {
  super(_id);
 }
 
 /**
  * Constructor for required fields
  */
 public Department (
  java.lang.Integer _id,
  fr.lunasquare.admin.prospect.logic.area.Area _area,
  java.lang.String _number) {
 
  super (
   _id,
   _area,
   _number);
 }
}

Reply

Marsh Posté le 28-12-2004 à 11:30:16    

tu utilises Hibernate Synchronizer non ? il me faudrait la classe mere de Department , BaseDepartment

Reply

Marsh Posté le 28-12-2004 à 11:36:47    

Pourquoi utilises tu le net.sf.hibernate.dialect.SQLServerDialect pour une base Sybase et non
net.sf.hibernate.dialect.SybaseDialect ?

Reply

Marsh Posté le 28-12-2004 à 11:40:28    

Oui j'utilise hibernate synchroniser.
 
j'ai essaye aussi avec SybaseDialect et c'est la meme erreur.
 
voici la classe mere:
package fr.lunasquare.admin.prospect.dao.baseDao;
 
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.Session;
import fr.lunasquare.admin.prospect.dao.dao.DepartmentDAO;
 
/**
 * This class has been automatically generated by Hibernate Synchronizer.
 * For more information or documentation, visit The Hibernate Synchronizer page
 * at http://www.binamics.com/hibernatesync or contact Joe Hudson at joe@binamics.com.
 *
 * This is an automatically generated DAO class which should not be edited.
 */
public abstract class BaseDepartmentDAO extends fr.lunasquare.admin.prospect.dao.dao._RootDAO {
 
 public static DepartmentDAO instance;
 
 /**
  * Return a singleton of the DAO
  */
 public static DepartmentDAO getInstance () {
  if (null == instance) instance = new DepartmentDAO();
  return instance;
 }
 
 /**
  * fr.lunasquare.admin.prospect.dao.dao._RootDAO _RootDAO.getReferenceClass()
  */
 public Class getReferenceClass () {
  return fr.lunasquare.admin.prospect.logic.area.Department.class;
 }
 
 public fr.lunasquare.admin.prospect.logic.area.Department load(java.lang.Integer key)
  throws net.sf.hibernate.HibernateException {
  return (fr.lunasquare.admin.prospect.logic.area.Department) load(getReferenceClass(), key);
 }
 
 public fr.lunasquare.admin.prospect.logic.area.Department load(java.lang.Integer key, Session s)
  throws net.sf.hibernate.HibernateException {
  return (fr.lunasquare.admin.prospect.logic.area.Department) load(getReferenceClass(), key, s);
 }
 
 public fr.lunasquare.admin.prospect.logic.area.Department loadInitialize(java.lang.Integer key, Session s)  
   throws net.sf.hibernate.HibernateException {  
  fr.lunasquare.admin.prospect.logic.area.Department obj = load(key, s);  
  if (!Hibernate.isInitialized(obj)) {
   Hibernate.initialize(obj);
  }  
  return obj;  
 }
 
 
 public fr.lunasquare.admin.prospect.logic.area.Department get(java.lang.Integer key)
  throws net.sf.hibernate.HibernateException {
  return (fr.lunasquare.admin.prospect.logic.area.Department) get(getReferenceClass(), key);
 }
 
 public fr.lunasquare.admin.prospect.logic.area.Department get(java.lang.Integer key, Session s)
  throws net.sf.hibernate.HibernateException {
  return (fr.lunasquare.admin.prospect.logic.area.Department) get(getReferenceClass(), key, s);
 }
 
 public fr.lunasquare.admin.prospect.logic.area.Department getInitialize(java.lang.Integer key, Session s)  
   throws net.sf.hibernate.HibernateException {  
  fr.lunasquare.admin.prospect.logic.area.Department obj = get(key, s);  
  if (!Hibernate.isInitialized(obj)) {
   Hibernate.initialize(obj);
  }  
  return obj;  
 }
 
 /**
  * Persist the given transient instance, first assigning a generated identifier. (Or using the current value
  * of the identifier property if the assigned generator is used.)  
  * @param department a transient instance of a persistent class  
  * @return the class identifier
  */
 public java.lang.Integer save(fr.lunasquare.admin.prospect.logic.area.Department department)
  throws net.sf.hibernate.HibernateException {
  return (java.lang.Integer) super.save(department);
 }
 
 /**
  * Persist the given transient instance, first assigning a generated identifier. (Or using the current value
  * of the identifier property if the assigned generator is used.)  
  * Use the Session given.
  * @param department a transient instance of a persistent class
  * @param s the Session
  * @return the class identifier
  */
 public java.lang.Integer save(fr.lunasquare.admin.prospect.logic.area.Department department, Session s)
  throws net.sf.hibernate.HibernateException {
  return (java.lang.Integer) super.save(department, s);
 }
 
 /**
  * Either save() or update() the given instance, depending upon the value of its identifier property. By default
  * the instance is always saved. This behaviour may be adjusted by specifying an unsaved-value attribute of the
  * identifier property mapping.  
  * @param department a transient instance containing new or updated state  
  */
 public void saveOrUpdate(fr.lunasquare.admin.prospect.logic.area.Department department)
  throws net.sf.hibernate.HibernateException {
  super.saveOrUpdate(department);
 }
 
 /**
  * Either save() or update() the given instance, depending upon the value of its identifier property. By default the
  * instance is always saved. This behaviour may be adjusted by specifying an unsaved-value attribute of the identifier
  * property mapping.  
  * Use the Session given.
  * @param department a transient instance containing new or updated state.
  * @param s the Session.
  */
 public void saveOrUpdate(fr.lunasquare.admin.prospect.logic.area.Department department, Session s)
  throws net.sf.hibernate.HibernateException {
  super.saveOrUpdate(department, s);
 }
 
 /**
  * Update the persistent state associated with the given identifier. An exception is thrown if there is a persistent
  * instance with the same identifier in the current session.
  * @param department a transient instance containing updated state
  */
 public void update(fr.lunasquare.admin.prospect.logic.area.Department department)  
  throws net.sf.hibernate.HibernateException {
  super.update(department);
 }
 
 /**
  * Update the persistent state associated with the given identifier. An exception is thrown if there is a persistent
  * instance with the same identifier in the current session.
  * Use the Session given.
  * @param department a transient instance containing updated state
  * @param the Session
  */
 public void update(fr.lunasquare.admin.prospect.logic.area.Department department, Session s)
  throws net.sf.hibernate.HibernateException {
  super.update(department, s);
 }
 
 /**
  * Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving
  * Session or a transient instance with an identifier associated with existing persistent state.  
  * @param id the instance ID to be removed
  */
 public void delete(java.lang.Integer id)
  throws net.sf.hibernate.HibernateException {
  super.delete(load(id));
 }
 
 /**
  * Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving
  * Session or a transient instance with an identifier associated with existing persistent state.  
  * Use the Session given.
  * @param id the instance ID to be removed
  * @param s the Session
  */
 public void delete(java.lang.Integer id, Session s)
  throws net.sf.hibernate.HibernateException {
  super.delete(load(id, s), s);
 }
 
 /**
  * Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving
  * Session or a transient instance with an identifier associated with existing persistent state.  
  * @param department the instance to be removed
  */
 public void delete(fr.lunasquare.admin.prospect.logic.area.Department department)
  throws net.sf.hibernate.HibernateException {
  super.delete(department);
 }
 
 /**
  * Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving
  * Session or a transient instance with an identifier associated with existing persistent state.  
  * Use the Session given.
  * @param department the instance to be removed
  * @param s the Session
  */
 public void delete(fr.lunasquare.admin.prospect.logic.area.Department department, Session s)
  throws net.sf.hibernate.HibernateException {
  super.delete(department, s);
 }
 
 /**
  * Re-read the state of the given instance from the underlying database. It is inadvisable to use this to implement
  * long-running sessions that span many business tasks. This method is, however, useful in certain special circumstances.
  * For example  
  * <ul>  
  * <li>where a database trigger alters the object state upon insert or update</li>
  * <li>after executing direct SQL (eg. a mass update) in the same session</li>
  * <li>after inserting a Blob or Clob</li>
  * </ul>
  */
 public void refresh (fr.lunasquare.admin.prospect.logic.area.Department department, Session s)
  throws net.sf.hibernate.HibernateException {
  super.refresh(department, s);
 }
 
    public String getDefaultOrderProperty () {
  return null;
    }
 
}

Reply

Marsh Posté le 28-12-2004 à 11:52:01    

c'est pas la classe de DAO que je voulais mais celle du bean BaseDepartment . Sinon je suis pas un grand fan de hib sync , quand ya trop de generation automatique de code on se trouve souvent face a ce genre de prob. Ton modele a l'air assez simple, si j'etais toi je le referais a la main. Regarde aussi du cote des requetes qu'on peut directement inclure ds les fichiers de mapping. Et dernier conseil, utilise le forum d'Hibernate, il est tres actif et il pourront peut etrte mieux t'aider que moi.

Reply

Marsh Posté le 28-12-2004 à 12:04:10    

voici baseDepartment:
 
package fr.lunasquare.admin.prospect.logic.area.baseValueObject;
 
import java.io.Serializable;
 
 
/**
 * This class has been automatically generated by Hibernate Synchronizer.
 * For more information or documentation, visit The Hibernate Synchronizer page
 * at http://www.binamics.com/hibernatesync or contact Joe Hudson at joe@binamics.com.
 *
 * This is an object that contains data related to the DEPARTMENT table.
 * Do not modify this class because it will be overwritten if the configuration file
 * related to this class is modified.
 *
 * @hibernate.class
 *  table="DEPARTMENT"
 */
public abstract class BaseDepartment  implements Serializable {
 
 public static String PROP_NUMBER = "Number";
 public static String PROP_AREA = "Area";
 public static String PROP_ID = "Id";
 
 
 private int hashCode = Integer.MIN_VALUE;
 
 // primary key
 private java.lang.Integer _id;
 
 // fields
 private java.lang.String _number;
 
 // many to one
 private fr.lunasquare.admin.prospect.logic.area.Area _area;
 
 
 // constructors
 public BaseDepartment () {
  initialize();
 }
 
 /**
  * Constructor for primary key
  */
 public BaseDepartment (java.lang.Integer _id) {
  this.setId(_id);
  initialize();
 }
 
 /**
  * Constructor for required fields
  */
 public BaseDepartment (
  java.lang.Integer _id,
  fr.lunasquare.admin.prospect.logic.area.Area _area,
  java.lang.String _number) {
 
  this.setId(_id);
  this.setArea(_area);
  this.setNumber(_number);
  initialize();
 }
 
 protected void initialize () {}
 
 
 
 /**
  * Return the unique identifier of this class
     * @hibernate.id
     *  generator-class="native"
     *  column="DEPARTMENT_ID"
     */
 public java.lang.Integer getId () {
  return _id;
 }
 
 /**
  * Set the unique identifier of this class
  * @param _id the new ID
  */
 public void setId (java.lang.Integer _id) {
  this._id = _id;
  this.hashCode = Integer.MIN_VALUE;
 }
 
 
 /**
  * Return the value associated with the column: NUMBER
  */
 public java.lang.String getNumber () {
  return _number;
 }
 
 /**
  * Set the value related to the column: NUMBER
  * @param _number the NUMBER value
  */
 public void setNumber (java.lang.String _number) {
  this._number = _number;
 }
 
 
 /**
     * @hibernate.property
     *  column=AREA_ID
  * not-null=true
  */
 public fr.lunasquare.admin.prospect.logic.area.Area getArea () {
  return this._area;
 }
 
 /**
  * Set the value related to the column: AREA_ID
  * @param _area the AREA_ID value
  */
 public void setArea (fr.lunasquare.admin.prospect.logic.area.Area _area) {
  this._area = _area;
 }
 
 
 public boolean equals (Object obj) {
  if (null == obj) return false;
  if (!(obj instanceof fr.lunasquare.admin.prospect.logic.area.baseValueObject.BaseDepartment)) return false;
  else {
   fr.lunasquare.admin.prospect.logic.area.baseValueObject.BaseDepartment mObj = (fr.lunasquare.admin.prospect.logic.area.baseValueObject.BaseDepartment) obj;
   if (null == this.getId() || null == mObj.getId()) return false;
   else return (this.getId().equals(mObj.getId()));
  }
 }
 
 
 public int hashCode () {
  if (Integer.MIN_VALUE == this.hashCode) {
   if (null == this.getId()) return super.hashCode();
   else {
    String hashStr = this.getClass().getName() + ":" + this.getId().hashCode();
    this.hashCode = hashStr.hashCode();
   }
  }
  return this.hashCode;
 }
 
 
 public String toString () {
  return super.toString();
 }
 
}

Reply

Marsh Posté le 28-12-2004 à 15:36:13    

[:psywalk]
moi qui croyait qu'hibernate était réservé à l'élite [:ciler]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 15:46:57    

the real moins moins a écrit :

[:psywalk]
moi qui croyait qu'hibernate était réservé à l'élite [:ciler]


tu t'en rejouis ou ca te desole ??  ;)  

Reply

Marsh Posté le 28-12-2004 à 15:49:41    

ha c'est du code généré, j'avais pas vu.
 
euh c'est quoi cette methode hashcode toute moisie!?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 15:59:17    

the real moins moins a écrit :

ha c'est du code généré, j'avais pas vu.
 
euh c'est quoi cette methode hashcode toute moisie!?


c'est un des charmes de hibernate synchronizer  ;)

Reply

Marsh Posté le 28-12-2004 à 16:01:01    

c'est quoi la difference avec generama?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 16:08:35    

je connais pas generama, mais en fait le plugin hib sync en lui meme  est pas mal , faut juste utiliser ses propres templates et non ceux livre d'origine

Reply

Marsh Posté le 28-12-2004 à 16:21:48    

ha, c'est un plugin eclipse ou quoi ?
 
 
... ben generama, c'est une appli qui genere du code en fonction d'une base de données... ça marche pour hibernate, ejb et d'autres... et il me semble que c'était un des outils recensés sur le site d'hibernate, +/- officiellement... ça a peut etre changé? (Gavin King à présenté (à Javapolis) - entre autres choses - un plugin eclipse qui faisait ça pour hibernate, et j'étais justement étonné qu'il ne mentionne pas generama...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 16:24:36    

oui desole je te l'avais pas dit, c'est un plugin eclipse, en tout cas merci pour generama , ca l'air interessant , je vais zieuter ca de plus pres

Reply

Marsh Posté le 28-12-2004 à 17:36:04    

j'ai toujours pas la solution a mon probleme!
j'ai egalement poste sur le forum d'hibernate et aucune reponse!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed