Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 如何在spring boot中显示mysql视图?_Java_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Java 如何在spring boot中显示mysql视图?

Java 如何在spring boot中显示mysql视图?,java,hibernate,spring-boot,jpa,Java,Hibernate,Spring Boot,Jpa,我有一个SpringBootCRUD应用程序,只要我使用常规的MySQL表,它就可以工作。但是我需要显示来自多个表的数据,所以我创建了一个MySQL视图。但是现在出现以下错误: 创建类中定义的名为“entityManagerFactory”的bean时出错 路径资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 调用init方法失败;嵌套异常是 org.hibernate.Ann

我有一个SpringBootCRUD应用程序,只要我使用常规的MySQL表,它就可以工作。但是我需要显示来自多个表的数据,所以我创建了一个MySQL视图。但是现在出现以下错误:

创建类中定义的名为“entityManagerFactory”的bean时出错 路径资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 调用init方法失败;嵌套异常是 org.hibernate.AnnotationException:未为实体指定标识符: net.teknow.medverter.domain.AppointmentView

我遵循这个例子:

以下是域对象:

package net.tekknow.medaverter.domain;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.Size;

@Entity
@Table(name = "vw_appointments")
public class AppointmentView implements Serializable {
    @Size(max = 32)
    @Column(name="Date")
    public String date;

    @Column(name="Physician")
    public String physician;

    @Column(name="LabCollected")
    public Timestamp labCollected;

    @Column(name="Note")
    public String note;

    public String getDate_time() {
        return date;
    }
    public String getPhysician() {
        return physician;
    }
    public Timestamp getDatetime_collected() {
        return labCollected;
    }
    public String getNote() {
        return note;
    }
}
以下是该视图的mysql查询,仅向您展示它的工作原理:

mysql>从vw_约会中选择*; +------------+-------------+---------------------+-------------------+|日期|医生| LabCollected |备注| +------------+-------------+---------------------+-------------------+| 2010年10月29日|坎贝尔,J | 2010-10-29 11:09:00 |无备忘| +------------+-------------+---------------------+-------------------+一组1行(0.02秒)

以下是服务代码:

@Service
@Transactional
public class AppointmentViewService {

    @Autowired
    AppointmentViewRepository repo;

    public List<AppointmentView> listAll() {
        return repo.findAll();
    }      
}
@服务
@交易的
公共类任命视图服务{
@自动连线
任命视图存储库回购;
公共列表listAll(){
返回回购findAll();
}      
}
以下是存储库代码:

public interface AppointmentViewRepository extends JpaRepository<AppointmentView,Integer> {}
public interface appointViewRepository扩展了JpaRepository{}

Hibernate不处理视图吗?建议?

错误消息中的所有内容:

未为实体指定标识符: net.teknow.medverter.domain.AppointmentView

通过使用
@Id
注释,设计视图,使其有一列可以映射为实体的标识符字段

您还可以将
@org.hibernate.annotations.Immutable
注释添加到您的实体中,以确保hibernate不会试图传播您对实体所做的更改

@实体
@表(name=“vw\U任命”)
//阻止Hibernate应用更改
@org.hibernate.annotations.Immutable
公共类AppointView实现可序列化{
//标识符。在实现JpaRepository时必须为整数
@身份证
@列(name=“约会Id”)
私有整数指定ID;
公共整数getAppointmentId(){
返回此.appointmentId;
}
public void setAppointId(整数AppointId){
this.appointmentId=appointmentId;
}
//公共属性???。
//如果出于技术原因,它不是强制性的,则首选私有属性+getter/setter
@尺寸(最大值=32)
@列(name=“Date”)
公共字符串日期;
@列(name=“医师”)
公立医师;
...
}

错误消息中的所有内容:

未为实体指定标识符: net.teknow.medverter.domain.AppointmentView

通过使用
@Id
注释,设计视图,使其有一列可以映射为实体的标识符字段

您还可以将
@org.hibernate.annotations.Immutable
注释添加到您的实体中,以确保hibernate不会试图传播您对实体所做的更改

@实体
@表(name=“vw\U任命”)
//阻止Hibernate应用更改
@org.hibernate.annotations.Immutable
公共类AppointView实现可序列化{
//标识符。在实现JpaRepository时必须为整数
@身份证
@列(name=“约会Id”)
私有整数指定ID;
公共整数getAppointmentId(){
返回此.appointmentId;
}
public void setAppointId(整数AppointId){
this.appointmentId=appointmentId;
}
//公共属性???。
//如果出于技术原因,它不是强制性的,则首选私有属性+getter/setter
@尺寸(最大值=32)
@列(name=“Date”)
公共字符串日期;
@列(name=“医师”)
公立医师;
...
}

非常感谢Olivier!添加了您的建议,现在不再有错误。非常感谢Olivier!添加了您的建议,现在不再出现错误。