我在本地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关系。我在所有其他课程中都使用了相同的设置
这是我的数据库的片段,我无法显示所有这就是为什么我从图像中删除了一些因素,这也是为什么它们在代码中但不在图像中的原因。
你们知道我为什么会收到这个错误吗? 我找不到原因 提前谢谢!
答案 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;