Hibernate在服务器上运行,但在添加新实体时不在Eclipse中运行

时间:2015-07-15 22:46:59

标签: java eclipse hibernate jpa

我看过这里无数的帖子,似乎没有一个能解决我的问题。我有一个带有HibernateJUnit的企业Java应用程序,但这似乎更像是一个测试环境问题。多个开发人员在Eclipse的本地系统上分别遇到此问题。在远程Tomcat服务器上,一切都运行良好。

我添加了 4个新实体,所有人都遇到了同样的问题所以我会专注于1.我绝对排除了拼写错误,没有将实体添加到persistence.xml和JPA验证。它在Eclipse中验证并完美编译等。

注意:

  • 我尝试了NAMED QUERY和NATIVE QUERY,但都没有工作。 Native Query会引发org.hibernate.MappingException: Unknown entity: com.xx.xx.db.entity.Dog异常。命名查询将引发org.hibernate.MappingException: Named query not known: Dog.findByDogName

  • 我们不使用hibernate-cfg.xml或那种性质的东西。我们使用persistence.xml,我的代码片段附在下面。

  • 已经存在的所有旧实体(并且相应的 命名查询,注释等)工作正常。这只是新的 这会造成问题。
  • 我们正在CentOS 5.9上运行Eclipse Kepler和Eclipse Juno。测试框架是JUnit

实体:

package com.xx.xx.db.entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

import java.util.*;
import javax.persistence.*;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import com.xx.xx.db.dbenums.*;
import com.xx.xx.db.helper.*;
import com.xx.xx.db.dao.DaoHelper;

@Entity
@Table(name = "DOG")
@NamedQueries({
    @NamedQuery(name = "Dog.findAll", query = "SELECT a FROM Dog a"),
    @NamedQuery(name = "Dog.findByDogName", query = "SELECT a FROM Dog a WHERE a.dogName = :dogName")
    })


public class Dog implements Serializable
{

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "DOG_ID", length = 16)
private Long dogId;
@Basic(optional = false)
@Column(name = "DOG_NAME", length = 16)
private String dogName;

public Dog()
{
    super();
}

public Dog(Long dogId)
{
    this.dogId = dogId;
}
public Dog(Long dogId, String dogName)
{
    this.dogId = dogId;
    this.dogName = dogName;
}

public Long getdogId()
{
    return dogId;
}

public void setdogId(Long dogId)
{
    this.dogId = dogId;
}

public String getdogName()
{
    return dogName;
}

public void setdogName(String dogName)
{
    this.dogName = dogName;
}
}

DAO:

public Dog findByDogName(String dogName)
{
   try
    {
        dogName = dogName.toUpperCase();
        Query query = entityManager.createNamedQuery("Dog.findByDogName");
        query.setParameter("dogName", dogName);

        List<Dog> mcList = query.getResultList();
        if (mcList != null && mcList.size() > 0)
        {
            return mcList.get(0);
        }
        _log.debug("dog match not found");
        return null;

    } catch (Exception e)
    {
        return null;
    }
}
来自persistence.xml的

片段:

<class>com.xx.xx.db.entity.xxxxxxxxxxx</class>
<class>com.xx.xx.db.entity.xxxxxxxxxxxxx</class>
<class>com.xx.xx.db.entity.Dog</class>

1 个答案:

答案 0 :(得分:0)

原来我们的应用程序有多个persistence.xml文件(每个子项目1个),即使“Dog”实体位于使用Dogs的子项目的persistence.xml中(并且测试是正在运行),Maven无法处理。它首先从persistence.xml读取,没有列出Dog实体,我猜不能合并。

在我们的所有persistence.xml文件中添加新实体后,经过大量的挖掘后解决了这个问题。