0

私はJboss7.1とjpa、ejbを使用しています.OneToMany関係でデータをmysqlデータベースに挿入したいです。

私は二つの実体 personne と voiture を持っています。私は自分のデータベースに人物を保存し、その人物にボアチュールを関連付けたいと考えています。問題は、コードをテスト (テスト) するとpersonne、データベースに新しいものがvoiture追加され、テーブルに追加されていないことがわかります。voiture

助けてくれますか 。

コード:

実体の人物

package com.domain;

import java.io.Serializable;
import javax.persistence.*;
import java.util.Set;


/**
 * The persistent class for the personne database table.
 * 
 */
@Entity
public class Personne implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idpersonne;

private String nom;

//bi-directional many-to-one association to Voiture
@OneToMany(mappedBy="personne")
private Set<Voiture> voitures;

public Personne() {
}

public Personne(String nom) {
    super();
    this.nom = nom;
}

public int getIdpersonne() {
    return this.idpersonne;
}

public void setIdpersonne(int idpersonne) {
    this.idpersonne = idpersonne;
}

public String getNom() {
    return this.nom;
}

public void setNom(String nom) {
    this.nom = nom;
}

public Set<Voiture> getVoitures() {
    return this.voitures;
}

public void setVoitures(Set<Voiture> voitures) {
    this.voitures = voitures;
}

} 

エンティティーボチュール

package com.domain;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the voiture database table.
 * 
*/
@Entity
public class Voiture implements Serializable {
private static final long serialVersionUID = 1L;

@Id
private int idvoiture;

private String type;

//bi-directional many-to-one association to Personne
@ManyToOne
private Personne personne;

public Voiture() {
}

public Voiture(String type) {
    super();
    this.type = type;
}

public int getIdvoiture() {
    return this.idvoiture;
}

public void setIdvoiture(int idvoiture) {
    this.idvoiture = idvoiture;
}

public String getType() {
    return this.type;
}

public void setType(String type) {
    this.type = type;
}

public Personne getPersonne() {
    return this.personne;
}

public void setPersonne(Personne personne) {
    this.personne = personne;
}

 }

これがインターフェースです

 package com.DAO;

import javax.ejb.Remote;

import com.domain.Personne;

@Remote
public interface PersonneDAO {

public void save(Personne personne);
public String sayhello();
}

実装パッケージ com.DAO.Impl;

 import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;

 import com.DAO.VoitureDAO;
 import com.domain.Voiture;
 @Stateless
 public class VoitureDAOImpl implements VoitureDAO {
@PersistenceContext(name = "JPADD")
EntityManager em;

@Override
public void save(Voiture voiture) {
    em.persist(voiture);
}
}

実装パッケージ com.DAO.Impl;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.DAO.PersonneDAO;
import com.domain.Personne;

@Stateless
public class PersonneDAOImpl implements PersonneDAO {
@PersistenceContext(name = "JPADD")
EntityManager em;

@Override
public String sayhello() {
    // TODO Auto-generated method stub
    return "helllllllllllllllllo";
}

@Override
public void save(Personne personne) {
    em.persist(personne);
}
}

これはテストです

package test;

import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.DAO.PersonneDAO;
import com.domain.Personne;
import com.domain.Voiture;

public class Test {

/**
 * @param args
 */

public static void main(String[] args) {

    Context intialcontext;
    Properties properties = new Properties();
    properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    try {
        intialcontext = new InitialContext(properties);
        PersonneDAO dao = (PersonneDAO) intialcontext
                .lookup("ejb:/projetweb/PersonneDAOImpl!com.DAO.PersonneDAO");
        // /----------------------------objet voiture-------------
        Voiture voiture = new Voiture("216");
        Set<Voiture> voitures = new HashSet<Voiture>();
        voitures.add(voiture);
        // -------------------------------------------------------
        Personne personne = new Personne("slatnia");
        personne.setVoitures(voitures);
        dao.save(personne);
    } catch (NamingException e) {
        e.printStackTrace();

    }
}

}

これは私の jboss-ejb-client.properties です

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost   
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
4

2 に答える 2

0

@OneToMany アノテーションに次の属性を追加してみてください

@OneToMany(cascade=CascadeType.ALL)
于 2012-05-07T09:50:01.043 に答える
0

に追加する必要cascade = CascadeType.PERSISTがあります@OneToMany

CascadeType.PERSIST

エンティティを永続化するときは、このフィールドに保持されているエンティティも永続化します。このカスケード ルールを自由に適用することをお勧めします。フラッシュ中に新しいエンティティを参照するフィールドが EntityManager で検出され、そのフィールドで CascadeType.PERSIST が使用されていない場合はエラーになるためです。

例:

@OneToMany(cascade = CascadeType.PERSIST)
private Set<Voiture> voitures;

CascadeTypeのJavadocおよびその他のドキュメントはhereにあります。

于 2012-05-07T09:50:09.457 に答える