Je suis nouveau à hiberner et j'ai quelques problèmes avec l'annotation de requête nommée. Mon code est le suivant et est plus ou moins généré par NetBeansProblème avec la requête nommée d'hibernate
La classe BasicUser:
package wmc.model;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "basic_user")
@NamedQueries({
@NamedQuery(name = "BasicUser.findAll", query = "SELECT b FROM BasicUser b"),
@NamedQuery(name = "BasicUser.findByFirstName", query = "SELECT b FROM BasicUser b WHERE b.firstName = :firstName"),
@NamedQuery(name = "BasicUser.findByLastName", query = "SELECT b FROM BasicUser b WHERE b.lastName = :lastName"),
@NamedQuery(name = "BasicUser.findByEmail", query = "SELECT b FROM BasicUser b WHERE b.email = :email"),
@NamedQuery(name = "BasicUser.findByPassword", query = "SELECT b FROM BasicUser b WHERE b.password = :password")})
public class BasicUser implements Serializable {
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@Column(name = "First_Name")
private String firstName;
@Basic(optional = false)
@Column(name = "Last_Name")
private String lastName;
@Id
@Basic(optional = false)
@Column(name = "Email")
private String email;
@Basic(optional = false)
@Column(name = "Password")
private String password;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "basicUser")
private StatUser statUser;
@JoinColumn(name = "Group_Name", referencedColumnName = "Group_Name")
@ManyToOne(optional = false)
private Groups groupName;
public BasicUser() {
}
...
et le fichier hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://mysql.dinhost.net:3306/coffeedrinkers</property>
<property name="hibernate.connection.username">bla</property>
<property name="hibernate.connection.password">bla</property>
</session-factory>
</hibernate-configuration>
C'est là que j'essayer d'utiliser la requête:
public static boolean userExists(String email, String password) {
Session session = null;
try{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session =sessionFactory.openSession();
Object object = session.getNamedQuery("wmc.model.BasicUser.findByEmail").
setString("email", email).uniqueResult();
BasicUser user = (BasicUser) object;
if(user != null && user.getPassword().equals(password)) {
return true;
}
}
catch(Exception e) {
e.printStackTrace();
}
return false;
}
Si je comprends bien, je n'ai pas faire de xml cartographie de ce que Informa tion est dans les annotations.
J'apprécie toute aide. Merci d'avance :)
persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="WMCPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>coffeee</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
et le soleil resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysql_coffeedrinkers_AnAmuserPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="serverName" value="mysql.dinhost.net"/>
<property name="portNumber" value="3306"/>
<property name="databaseName" value="coffeedrinkers"/>
<property name="User" value="bla"/>
<property name="Password" value="bla"/>
<property name="URL" value="jdbc:mysql://mysql.dinhost.net:3306/coffeedrinkers"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
</jdbc-connection-pool>
<jdbc-resource enabled="true" pool-name="mysql_coffeedrinkers_AnAmuserPool" jndi-name="coffeee" object-type="user"/>
</resources>
Maintenant, je l'ai fait ce que vous avez dit et utilisé EntityManager au lieu de session. Maintenant, je reçois l'erreur suivante: 08-07-2010 16:49:25 org.hibernate.connection.DatasourceConnectionProvider configurer SEVERE: Impossible de trouver la source de données: coffeee javax.naming.NoInitialContextException: Nécessité de spécifier le nom de la classe dans l'environnement ou la propriété système, ou en tant que paramètre d'applet, ou dans un fichier de ressources d'application: java.naming.factory.initial – AnAmuser
@AnAmuser: Exécutez-vous ce code dans GlassFish? Si vous ne l'êtes pas, je suppose que vous devez fournir un fichier 'jndi.properties' avec les paramètres appropriés, voir [cette réponse précédente] (http://stackoverflow.com/questions/2759300/how-to-set-up -jndi-properties-for-datastore/2759542 # 2759542). Mais c'est une question très différente que je ne peux pas couvrir dans la boîte de commentaire. Si vous l'êtes, l'usine initiale doit être définie. Mais comme je l'ai dit, c'est vraiment un problème différent. Vous devriez ouvrir une nouvelle question par souci de clarté (une question = un problème). –