Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一对一休眠未映射_Java_Mysql_Hibernate - Fatal编程技术网

Java 一对一休眠未映射

Java 一对一休眠未映射,java,mysql,hibernate,Java,Mysql,Hibernate,以下是MySQL数据库中的表的外观: mysql> DESCRIBE customer; +-------------+----------------------+------+-----+ | Field | Type | Null | Key | +-------------+----------------------+------+-----+ | customer_id | smallint(5) unsigned | NO |

以下是MySQL数据库中的表的外观:

mysql> DESCRIBE customer;
+-------------+----------------------+------+-----+
| Field       | Type                 | Null | Key |
+-------------+----------------------+------+-----+
| customer_id | smallint(5) unsigned | NO   | PRI |
| first_name  | varchar(45)          | NO   |     |
| last_name   | varchar(45)          | NO   |     |
| address_id  | smallint(5) unsigned | NO   | MUL |
+-------------+----------------------+------+-----+

mysql> DESCRIBE address;
+-------------+----------------------+------+-----+
| Field       | Type                 | Null | Key |
+-------------+----------------------+------+-----+
| address_id  | smallint(5) unsigned | NO   | PRI |
| address     | varchar(50)          | NO   |     |
+-------------+----------------------+------+-----+
这就是我试图实现一对一关系的方式:

@Entity
@Table(name = "customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int customer_id;

    @Basic
    private String first_name;

    @Basic
    private String last_name;

    @OneToOne(targetEntity = Address.class)
    @JoinColumn(name = "address_id")
    private Address address;
在Address.java中

@Entity
@Table(name = "address")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int address_id;

    @Basic
    private String address;

    @OneToOne(mappedBy = "address", targetEntity = Customer.class)
    private Customer customer;
我正在通过一个简单的测试进行测试:

@Test
public void testGetAll() {
    PersistenceUtil.buildEntityManagerFactory();
    AddressDaoImpl addressDao = new AddressDaoImpl();
    List all = addressDao.getAll();
    System.out.println(all.iterator().next());
}
我得到:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: address is not mapped [FROM address]
我做错了什么?为什么不为地址实体提取客户

编辑

以下是我的DAO类的代码:

package biz.tugay.saqila.dao;
/* User: koray@tugay.biz Date: 08/08/15 Time: 10:18 */

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import java.util.List;

public abstract class GenericDaoImpl<T> implements GenericDao<T> {

    @Override
    public List getAll() {
        EntityManager em = PersistenceUtil.getEntityManager();
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        List<T> all = em.createQuery("FROM " + getTableName()).getResultList();
        transaction.commit();
        return all;
    }

}

public class AddressDaoImpl extends GenericDaoImpl<Address> {
    @Override
    public String getTableName() {
        return "address";
    }
}
package biz.tugay.saqila.dao;
/*用户:koray@tugay.biz日期:2015年8月8日时间:10:18*/
导入javax.persistence.EntityManager;
导入javax.persistence.EntityTransaction;
导入java.util.List;
公共抽象类GenericDaoImpl实现GenericDao{
@凌驾
公共列表getAll(){
EntityManager em=PersistenceUtil.getEntityManager();
EntityTransaction=em.getTransaction();
transaction.begin();
List all=em.createQuery(“FROM”+getTableName()).getResultList();
commit();
全部归还;
}
}
公共类AddressDaoImpl扩展了GenericDaoImpl{
@凌驾
公共字符串getTableName(){
返回“地址”;
}
}
JPQL(HQL)类和属性名称为。因此,在查询中,必须为
地址
实体使用正确的类名:

from Address ...
因此,请将实体名称改为以大写字母A开头:

public class AddressDaoImpl extends GenericDaoImpl<Address> {
    @Override
    public String getTableName() {
        return "Address";
    }
}
public类AddressDaoImpl扩展了GenericDaoImpl{
@凌驾
公共字符串getTableName(){
返回“地址”;
}
}

你能粘贴getAll()代码吗?@wawek我有,我也解决了这个问题,我在这里复制的测试是错误的。@wawek测试失败的是:AddressDaoImpl addressDao=new AddressDaoImpl();不是CustomerDaoImpl..正如@Dragan Bozanovic回答的,您必须使用类名而不是表名。