2012-05-07 11 views
0

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

私は2つのエンティティpersonneとvoitureを持っています。私は自分のデータベースに人を保存し、彼のために声を連想させたい。問題は、自分のコード(テスト)をテストすると、データベースに新しいpersonneが追加されていることがわかります。voiture

私に助けてください。

コード:

エンティティPERSONNE

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; 
} 

} 

エンティティがvoiture

​​

このインタフェース

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 
+0

エラーシナリオも追加できますか? – UVM

+0

@UNNIコンソールにエラーが1つしかありませんWARN:ヘッダ0xffffffffでサポートされていないメッセージが受信されました – wadii

答えて

0

は@OneToMany注釈

@OneToMany(cascade=CascadeType.ALL) 
に次の属性を追加してみています
+0

@UNNI コンソールにエラーが1つも発生していません WARN:サポートされていないメッセージがヘッダ0xffffffff – wadii

0

を追加する必要があります@OneToMany

CascadeType.PERSIST

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

例:

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

のJavadoc hereCascadeTypeと他のdocに関する。

+0

私は試してみます @OneToMany(カスケード= CascadeType.PERSIST) プライベートセット voitures; ただし、動作しません – wadii

関連する問題