IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Confusion entre les entités et JPA


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Par défaut Confusion entre les entités et JPA
    Bonjour à tous,

    Ayant découvert Java depuis peu, il y a certains points qui sont encore pour moi très flou.

    Du coup je me retrouve face à un autre problème..
    Pour m'entraîner, je fais un sorte de gestionnaire de produits/catégories sous forme de Back office.
    Mon but, est d'ajouter un produit à ma base, en passant par Jpa ...
    Mon problème est que je n'arrive pas à ajouter ou même définir une table pour mes produits ...

    J'avais mis comme annotation sur mon entité Product:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Table(name="PRODUCTS")
    Afin de définir ma table products.
    Mais de ce fait, je me retrouve face à quelque chose d'étrange (du moins pour moi ^^).

    Lorsque dans mon Servlet, je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
     
            if(request.getParameter("type") != null && request.getParameter("nom") != null){
     
    		String categoryIdParam = request.getParameter("categorie");
    		BigDecimal price = new BigDecimal(request.getParameter("price"));
     
    		Product product = new Product();
    		product.setName(request.getParameter("nom"));
    		product.setContent(request.getParameter("type"));
    		product.setPrice(price);
                    product.setId(null);
     
    		if(categoryIdParam != null && !categoryIdParam.isEmpty()) {
    			Long categoryId = Long.valueOf(categoryIdParam);
    			Category category = categoryDao.getCategoryById(categoryId);
    			product.setCategory(category);
    		}
     
    		//productDao.addProduct(product);
     
     
             }
     
     
             HttpServletResponse resp = (HttpServletResponse) response;
             resp.sendRedirect(getServletContext().getContextPath()+"/auth/listProduct");
     
        }
    Un produit s'ajoute à la Base, alors que je ne suis même pas passé par JPA ! (l'utilisation de JPA est en commentaire dans le code ci-dessus).
    Alors que si j'enlève l'annotation @Table, et que je décommente l'appel Jpa ci-dessus, il cherche mes produits dans la table "Product" (via JPA) qui n'existe pas bien évidement ...
    En fait, qu'est-ce qui peut m'assurer que je suis bien passé par Jpa ? ^^

    C'est compliqué de se plonger dans Java alors que l'on a eu que 3 jours de cours condensés ^^

    Dans tous les cas, je vous remercie d'avance pour toute l'aide que vous pourriez m'apporter

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le code des 2 entités et le persistence.xml également...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Par défaut
    Allez, soyons fous, je vous montre la totalité:

    Le servlet, se trouve ci-dessus.

    Le persistence.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    	<persistence-unit name="SupCommerce-PU" transaction-type="RESOURCE_LOCAL">
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    		<properties>
    			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
    			<property name="javax.persistence.jdbc.user" value="root" />
    			<property name="javax.persistence.jdbc.password" value="" />
    			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/SupCommerce" />
                            <property name="eclipselink.cache.shared.default" value="false"/>
          		<property name="hibernate.hbm2ddl.auto" value="update" />
          		<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    		</properties>
    	</persistence-unit>
    </persistence>
    L'entité Product:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    package com.argetprod.supcommerce.entity;
     
    import java.io.Serializable;
    import java.math.BigDecimal;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
     
    /**
     *
     * @author Flo
     */
    @Entity
    @Table(name="PRODUCTS")
    public class Product implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(unique=true, nullable=true)
        private String name;
        @Column(unique=false, nullable=true)
        private String content;
        @Column(unique=false, nullable=true)
        private BigDecimal price;
        @ManyToOne
        @JoinColumn(name="category_fk")
        private Category category;
     
        public Product() {
     
        }
     
        public Product(String name, String description, BigDecimal price, Category category) {
            this.name = name;
    	this.content = description;
    	this.price = price;
    	this.category = category;
        }
     
        public Category getCategory() {
            return category;
        }
     
        public void setCategory(Category category) {
            this.category = category;
        }
     
        public String getContent() {
            return content;
        }
     
        public void setContent(String content) {
            this.content = content;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public BigDecimal getPrice() {
            return price;
        }
     
        public void setPrice(BigDecimal price) {
            this.price = price;
        }
     
     
        public Long getId() {
            return id;
        }
     
        public void setId(Long id) {
            this.id = id;
        }
     
    }
    Le PersistenceManager:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package com.argetprod.supcommerce.util;
     
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
     
     
     
    /**
     *
     * @author Flo
     */
     
    public class PersistenceManager{
     
        private static EntityManagerFactory emf;
     
        public static EntityManagerFactory getEmf() {
     
            if(emf == null){
                emf = Persistence.createEntityManagerFactory("SupCommerce-PU");
            }
            return emf;
     
        }
     
     
     
        public static void closeEntityManagerFactory() {
     
            if(emf != null && emf.isOpen()) emf.close();
     
        }
     
     
     
    }
    Le DaoFactory:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.argetprod.supcommerce.dao;
     
    import com.argetprod.supcommerce.dao.jpa.JpaCategoryDao;
    import com.argetprod.supcommerce.dao.jpa.JpaProductDao;
    import com.argetprod.supcommerce.util.PersistenceManager;
     
    /**
     *
     * @author Flo
     */
    public final class DaoFactory {
     
    	private static DaoFactory instance;
     
    	private CategoryDao categoryDao;
    	private ProductDao productDao;
     
    	public static DaoFactory getInstance() {
    		if(instance == null) {
    			instance = new DaoFactory();
    		}
    		return instance;
    	}
     
    	public CategoryDao getCategoryDao() {
    		if(categoryDao == null) {
    			categoryDao = new JpaCategoryDao(PersistenceManager.getEmf());
    		}
    		return categoryDao;
    	}
     
    	public ProductDao getProductDao() {
    		if(productDao == null) {
    			productDao = new JpaProductDao(PersistenceManager.getEmf());
    		}
    		return productDao;
    	}
     
    }
    Bon, après j'ai une interface nommée ProductDao dont je ne vois pas l'intérêt de vous montrer ...
    Et donc, pour finir, mon JpaProductDao (du moins une partie, parce qu'il a quand même pas mal de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package com.argetprod.supcommerce.dao.jpa;
     
    import com.argetprod.supcommerce.dao.ProductDao;
    import com.argetprod.supcommerce.entity.Product;
    import java.util.List;
    import javax.persistence.*;
     
    /**
     *
     * @author Flo
     */
    public class JpaProductDao implements ProductDao {
     
    	private EntityManagerFactory emf;
     
     
    	public JpaProductDao(EntityManagerFactory emf) {
    		this.emf = emf;
    	}
     
            public JpaProductDao() {
                throw new UnsupportedOperationException("Not yet implemented");
            }
     
     
            @Override
    	public Product addProduct(Product product) {
    		Product result = null;
    		EntityManager em = emf.createEntityManager();
    		try {
    			em.getTransaction().begin();
    			em.persist(product);
    			em.getTransaction().commit();
    			result = product;
    		} finally {
    			if(em.getTransaction().isActive()) em.getTransaction().rollback();
    			em.close();
    		}
    		return result;
    	}
     
    /* Suite du code ... */
    Voilà . Tout un paquet de fichiers ! ^^

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Avec le code que tu montres, je ne vois pas comment il peut persister l'entité "Product".
    Tu es sûr que le code montré est celui qui est exécuté ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Par défaut
    Sûr et certain !
    Au pire, je t'envoies l'archive de mon projet ? (il n'y a rien de secret dans tous les cas)

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    ok, ce sera certainement plus facile de trouver avec l'intégralité du projet
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/05/2013, 14h18
  2. les propriétés de navigation entre les entités
    Par midialzer dans le forum Silverlight
    Réponses: 0
    Dernier message: 13/08/2012, 15h00
  3. Confusion entre les caratere '\n'et '\r'
    Par uriotcea dans le forum Débuter
    Réponses: 5
    Dernier message: 17/02/2012, 12h03
  4. Méthode de travail entre les entités
    Par poussinphp dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 29/04/2007, 19h21
  5. Confusions entre les one/many-to-many/one
    Par TigrouMeow dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/01/2007, 21h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo