Domanda

I'm having some trouble with my application on my local JBOSS 7.1.1 server.
I've just setup my model and my persistence.xml and now the .war cannot deploy anymore.
After instantiating all my services I get the following error, which isn't usefull at all:

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  

My persistence.xml looks like this:

<?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>

With all the properties configured in the standalone.xml of the server:

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

Some answers on here suggest that it has something to do with my model but I'm rather new to this and I don't know what I'm doing wrong. I have 19 model classes but here are snippets of some of them:

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

Advertiser class:

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

Hostel class:

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

I've chosen these three classes because it shows how I've setup @OneToMany, @ManyToOne, @OneToOne and @ManyToMany relations. I've used the same setup in all other classes.
Here is a snippet of my database, I cannot show everything that's why I've deleted some enitity's from the image and that's also why they are in code but not in the image.
Database model

Do you guys know why I am getting this error?
I can't find the reason.
Thanks in advance!

È stato utile?

Soluzione

I've solved the issue.
There were some errors in my manyToOne syntax that caused issues.
The nullpointer were oneToOne errors because they were mapped the wrong way.
The correct syntax to map them is as follows:

User class:

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

Advertiser class:

@Id
@OneToOne(fetch=FetchType.LAZY)   
@JoinColumn(name="user_id")
private User user_id;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top