由于jboss.persistenceunit中的NullPointer,JBOSS服务器无法启动服务

时间:2014-04-04 13:12:01

标签: hibernate java-ee jpa jboss resteasy

我在本地JBOSS 7.1.1服务器上的应用程序遇到了一些问题 我刚刚设置了我的模型和我的persistence.xml,现在.war就不能再部署了 实例化我的所有服务后,我得到以下错误,这根本没用:

14:43:32,571 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.persistenceunit."TravelCanvas.war#TravelCanvas": org.jboss.msc.service.StartException in service jboss.persistenceunit."TravelCanvas.war#TravelCanvas": Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_51]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_51]
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:538)
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:126)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116)
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1514)
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1437)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 more  

我的persistence.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="TravelCanvas">
        <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
    </persistence-unit>
</persistence>

在服务器的standalone.xml中配置所有属性:

<datasource jta="false" jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-ccm="false">
                    <connection-url>jdbc:mysql://localhost:3306/gohostel</connection-url>
                    <driver-class>com.mysql.jdbc.Driver</driver-class>
                    <driver>mysql-connector-java-5.1.29-bin.jar</driver>
                    <security>
                        <user-name>gohostel</user-name>
                        <password>gohostel</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                    </validation>
                    <statement>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>

这里的一些答案表明它与我的模型有关,但我对此很新,我不知道我做错了什么。我有19个模型类,但这里是其中一些的片段:

@XmlRootElement
@Entity
@Table(name="user")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String email;
    private String fb_account_id;
    private String profile_picture;
    private String password;
    private String password_salt;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="id")
    private Language language_id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy="user_id")
    private List<Post> posts;

    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="id")
    private Advertiser advertiser;

    @ManyToMany
    @JoinTable(name="user_isGoingTo_post",
        joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
        inverseJoinColumns={@JoinColumn(name="post_id", referencedColumnName="id")})
    private List<Post> userIsGoingToPost;

    @ManyToMany
    @JoinTable(name="hostel_has_manager",
        joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
        inverseJoinColumns={@JoinColumn(name="hostel_id", referencedColumnName="id")})
    private List<Hostel> userIsManagerOf;

    @ManyToMany
    @JoinTable(name="user_has_languages",
        joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
        inverseJoinColumns={@JoinColumn(name="language_id", referencedColumnName="id")})
    private List<Language> userSpeaksLanguages;

    @ManyToMany
    @JoinTable(name="user_likes_ad",
        joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
        inverseJoinColumns={@JoinColumn(name="ad_id", referencedColumnName="id")})
    private List<Ad> userLikesAd;

广告客户类:

@XmlRootElement
@Entity
@Table(name="advertiser")
public class Advertiser implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @OneToOne(fetch=FetchType.LAZY, mappedBy="advertiser")    
    private User user_id;

    private String name;
    private String info;
    private String website_url;

    @OneToMany(fetch = FetchType.LAZY, mappedBy="advertiser_user_id")
    private List<Ad> ads;

宿舍课程:

@XmlRootElement
@Entity
@Table(name="hostel")
public class Hostel implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String website_url;

    @OneToMany(fetch = FetchType.LAZY, mappedBy="hostel_id")
    private List<HostelImage> images;

     @OneToMany(fetch = FetchType.LAZY, mappedBy="hostel_id")
     private List<HostelLocation> locations;

     @ManyToMany(mappedBy="userIsManagerOf")
     private List<User> managersOfThisHostel;

我选择了这三个类,因为它显示了我如何设置@OneToMany,@ ManyToOne,@ OneToOne和@ManyToMany关系。我在所有其他课程中都使用了相同的设置 这是我的数据库的片段,我无法显示所有这就是为什么我从图像中删除了一些因素,这也是为什么它们在代码中但不在图像中的原因。 Database model

你们知道我为什么会收到这个错误吗? 我找不到原因 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题 我的manyToOne语法中存在一些导致问题的错误 nullpointer是oneToOne错误,因为它们以错误的方式映射 映射它们的正确语法如下:

用户类:

@OneToOne(fetch=FetchType.LAZY, mappedBy="user_id")
private Advertiser advertiser;

广告客户类:

@Id
@OneToOne(fetch=FetchType.LAZY)   
@JoinColumn(name="user_id")
private User user_id;