Exception in thread "main" javax.ejb.EJBTransactionRolledbackException: Transaction rolled back
at org.jboss.ejb3.tx.Ejb3TxPolicy.handleEndTransactionException(Ejb3TxPolicy.java:54)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke

解决方案 »

  1.   

    这是一个实体类Person
    package com.lxy.OneToOne;import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    import javax.persistence.PrimaryKeyJoinColumn;
    import javax.persistence.Table;@Entity
    @Table(name="person")
    public class Person implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private int id;
    private int age;
    @Column(length=64)
    private String name;
    private boolean sex;
    @OneToOne
    @PrimaryKeyJoinColumn
    private CardID card;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public boolean isSex() {
    return sex;
    }
    public void setSex(boolean sex) {
    this.sex = sex;
    }


    public CardID getCard() {
    return card;
    }
    public void setCard(CardID card) {
    this.card = card;
    }
        
    }
    这是另一个实体类CardID
    package com.lxy.OneToOne;import java.io.Serializable;import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;@Entity
    @Table(name="card")
    public class CardID implements Serializable{

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private int id;
    @Column(length=18)
    private String number;
    private Person person;
    public CardID()
    {

    }
    public CardID(String number)
    {
    this.number=number;
    }
    @OneToOne(mappedBy="card")
    public Person getPerson() {
    return person;
    }
    public void setPerson(Person person) {
    this.person = person;
    }
    public String getNumber() {
    return number;
    }
    public void setNumber(String number) {
    this.number = number;
    }
    }
    这是实现管理 接口的类
    package com.lxy.OneToOne;import javax.ejb.Remote;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;@Stateless
    @Remote({PersonManager.class})
    public class PersonManagerBean implements PersonManager { @PersistenceContext
    public EntityManager em;
    public void insertPerson(String name, int age,  boolean sex,String number) {
    Person per=new Person();
    per.setAge(age);
    per.setName(name);
    per.setSex(sex);
    CardID card=new CardID(number);
    card.setPerson(per);
    per.setCard(card);
    em.persist(per);
    System.out.println("插入成功");
    } }
    部署的时候没有错误,但是客户端调用的时候就会出现上面那一大堆错误,求救啊!!
      

  2.   


    persist的时候出错了嘛在em.persist(per);
    前后加上:
    em.getTransaction().begin();em.getTransaction().commit()看看报啥错另 persistence.xml文件咋配置的?
      

  3.   

    如果在em.persist(per)前后加上那两条语句,出现如下错误
    Exception in thread "main" javax.ejb.EJBException: java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager
    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)
    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
      

  4.   

    persistence.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence 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" version="1.0">
        
    <persistence-unit name="TryPU" transaction-type="JTA">
       <jta-data-source>java:/database</jta-data-source>
       <properties>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
       </properties>
    </persistence-unit>
      
    </persistence>