【hibernate】应用程序级别的视图

转载:https://www.cnblogs.com/yangchongxing/p/10361281.html

在没有数据库修改权限时,像创建视图可以使用 hibernate 的应用程序视图。

@org.hibernate.annotations.Immutable 不可变

@org.hibernate.annotations.Subselect(value="select u.id as id, concat(u.username, '_account') as name from User u") 子查询

@org.hibernate.annotations.Synchronize({"User"}) 列出 select 中引用的所有表名,多个表用逗号 {"User", "Role"}

package cn.ycx.study.hibernate.entity;

import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@org.hibernate.annotations.Immutable
@org.hibernate.annotations.Subselect(value="select u.id as id, concat(u.username, '_account') as name from User u")
@org.hibernate.annotations.Synchronize({"User"})
//自定义视图
public class UserView {
@Id
protected long id;
protected String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UserView [id=" + id + ", name=" + name + "]";
}
}
package cn.ycx.study.hibernate;

import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.Collection;
import java.util.List; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class)
public class UserViewTest { private Session session = null; public UserViewTest(SessionFactory sessionFactory) {
this.session = sessionFactory.openSession();
} @SuppressWarnings("rawtypes")
@Parameters
public static Collection sessionFactory() {
return Arrays.asList(new Object[]{EnvironmentParameter.getSessionFactoryInstance()});
} @Before
public void setUp() throws Exception {
this.session.beginTransaction();
} @After
public void tearDown() throws Exception {
this.session.getTransaction().commit();
} @Test
public void test() {
List list = this.session.createQuery("select u from UserView u").getResultList();
for(Object o : list) {
System.out.println(o);
}
System.out.println("view execute");
assertTrue(true);
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<!-- 设置Hibernate的隔离级别 2:读已提交-->
<property name="hibernate.connection.isolation">2</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 控制台 SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对 SQL 格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 数据库关键字启用引号 -->
<property name="hibernate.auto_quote_keyword">true</property>
<!-- 给表明添加统一前缀
<property name="hibernate.physical_naming_strategy">cn.ycx.study.hibernate.strategy.PhysicalNamingStrategyImpl</property>
-->
<!--
自动生成数据表的生成策略
create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行。
create-drop: 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除
update: 第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate: 每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值
-->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 删除对象后,使其OID置为null
<property name="use_identifier_rollback">true</property>--> <mapping class="cn.ycx.study.hibernate.entity.User"/>
<mapping class="cn.ycx.study.hibernate.entity.Item"/>
<mapping class="cn.ycx.study.hibernate.entity.UserView"/>
</session-factory>
</hibernate-configuration>

【hibernate】应用程序级别的视图的更多相关文章

  1. Asp.net 程序部署问题——在应用程序级别之外使用注册为 allowDefinition='MachineToApplicati错误信息

    [转]在应用程序级别之外使用注册为 allowDefinition='MachineToApplicati 错误信息: ======================================== ...

  2. 错误 1 在应用程序级别之外使用注册为 allowDefinition='

    原文:错误 1 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的,银流沙 昨天运行一个.NET网站项目时,出现了以下问题: 在应 ...

  3. iOS开发 ~应用程序设计理念:视图控制器(UIViewController)、视图(UIView)

    应用程序设计理念:视图控制器(UIViewController).视图(UIView) 利用视图控制器(底层)管理视图(外观),一对一 1.视图的作用:负责显示的外观 2.视图控制器的作用:创建界面. ...

  4. hibernate ——helloWorld程序(annotation配置)

    在  <hibernate  ——helloWorld程序(XML配置)>基础上,修改.添加部分文件: 1.Teacher类和Teacher表 package com.pt.hiberna ...

  5. 微信小程序之可滚动视图 scroll-view 的使用注意

    微信小程序之可滚动视图 scroll-view 使用注意: 1.scroll-view 中的需要滑动的元素不可以用 float 浮动: 2.scroll-view 中的包裹需要滑动的元素的大盒子用 d ...

  6. 错误 在应用程序级别之外使用注册为 allowDefinition='MachineToApplic

    错误 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的.如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误. 如果 ...

  7. Hibernate 事物隔离级别 深入探究

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

  8. Hibernate 事物隔离级别

      Hibernate事务和并发控制                                            ++YONG原创,转载请注明 1.    事务介绍: 1.1.        ...

  9. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

随机推荐

  1. web服务,ftp服务以及共享实现

    在开始服务前一定要确保可以ping通外网,在虚拟机联网但ping 不通外网下 确认vim /etc/sysconfig/network-scripts/ifcfg-ens33 (nmcli conne ...

  2. tornado install

    pip install tornado Linux 安装时注意库的安装路径和执行时寻找路径是否一样 Windows 安装时注意user是否有权限 解决办法:

  3. Css搭建

    教你做css比较好的网站: https://www.jianshu.com/p/23b2bfc9a90d?tdsourcetag=s_pcqq_aiomsg https://cloud.tencent ...

  4. Spring Boot 注解之ObjectProvider源码追踪

    最近依旧在学习阅读Spring Boot的源代码,在此过程中涉及到很多在日常项目中比较少见的功能特性,对此深入研究一下,也挺有意思,这也是阅读源码的魅力之一.这里写成文章,分享给大家. 自动配置中的O ...

  5. cookie、session、token的区别

    一.  cookie 1.什么是cookie? Cookie 技术产生源于 HTTP 协议在互联网上的急速发展.随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服 ...

  6. django-ajax传输数据

    AJAX简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML". 即使用Javascript语言与服务器 ...

  7. Xtrabackup 安装 参数详解

    目录 安装 常用参数详解 innobackupex 相关参数 xtrabackup相关参数 安装 继Xtrabackup 介绍,本次来讲解安装和使用. Xtrabackup的RPM包下载地址: 系统版 ...

  8. flask-简介

    什么是flask? Flask简介: Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务,在介绍Flask之前首先来聊下它和Django的联系 ...

  9. 管道符和作业控制、shell变量、环境变量配置文件 使用介绍

    第6周第1次课(4月23日) 课程内容: 8.6 管道符和作业控制 8.7/8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.ape ...

  10. __getattribute__(self, obj) 这个方法中的obj这个参数

    class Itcast(object): def __init__(self, subject1): self.subject1 = subject1 print("^^^^^^^---- ...