HibernateD

D 语言的 ORM 框架
授权协议 未知
开发语言
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 不详
投 递 者 琴英华
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

HibernateD 是 D 语言的 ORM 框架,类似 Java 的 Hibernate,示例代码:

import hibernated.core;


// Annotations of entity classes

class User {
    long id;
    string name;
    Customer customer;
    @ManyToMany // cannot be inferred, requires annotation
    LazyCollection!Role roles;
}

class Customer {
    int id;
    string name;
    // Embedded is inferred from type of Address
    Address address;

    Lazy!AccountType accountType; // ManyToOne inferred

    User[] users; // OneToMany inferred

    this() {
        address = new Address();
    }
}

@Embeddable
class Address {
    string zip;
    string city;
    string streetAddress;
}

class AccountType {
    int id;
    string name;
}

class Role {
    int id;
    string name;
    @ManyToMany // w/o this annotation will be OneToMany by convention
    LazyCollection!User users;
}

// create metadata from annotations
EntityMetaData schema = new SchemaInfoImpl!(User, Customer, AccountType, 
                                 T1, TypeTest, Address, Role, GeneratorTest);




// setup DB connection factory
MySQLDriver driver = new MySQLDriver();
string url = MySQLDriver.generateUrl("localhost", 3306, "test_db");
string[string] params = MySQLDriver.setUserAndPassword("testuser", "testpasswd");
DataSource ds = ConnectionPoolDataSourceImpl(driver, url, params);

// create session factory
Dialect dialect = new MySQLDialect();
SessionFactory factory = new SessionFactoryImpl(schema, dialect, ds);
scope(exit) factory.close();

// Create schema if necessary
{
// get connection
Connection conn = ds.getConnection();
scope(exit) conn.close();
// create tables if not exist
factory.getDBMetaData().updateDBSchema(conn, false, true);
}

// Now you can use HibernateD

// create session
Session sess = factory.openSession();
scope(exit) sess.close();

// use session to access DB

// read all users using query
Query q = sess.createQuery("FROM User ORDER BY name");
User[] list = q.list!User();

// create sample data
Role r10 = new Role();
r10.name = "role10";
Role r11 = new Role();
r11.name = "role11";
Customer c10 = new Customer();
c10.name = "Customer 10";
User u10 = new User();
u10.name = "Alex";
u10.customer = c10;
u10.roles = [r10, r11];
sess.save(r10);
sess.save(r11);
sess.save(c10);
sess.save(u10);

// load and check data
User u11 = sess.createQuery("FROM User WHERE name=:Name").
                           setParameter("Name", "Alex").uniqueResult!User();
assert(u11.roles.length == 2);
assert(u11.roles[0].name == "role10" || u11.roles.get()[0].name == "role11");
assert(u11.roles[1].name == "role10" || u11.roles.get()[1].name == "role11");
assert(u11.customer.name == "Customer 10");
assert(u11.customer.users.length == 1);
assert(u11.customer.users[0] == u10);
assert(u11.roles[0].users.length == 1);
assert(u11.roles[0].users[0] == u10);

// remove reference
u11.roles.get().remove(0);
sess.update(u11);

// remove entity
sess.remove(u11);
  • @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,optional=true) CascadeType CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法! CascadeType.REMOVE:级联删除,当调用remove

  • 1 我这里以书本表和类别表为例 一定义好桥接表,分别是书本,类别表的外键 session.get(Book.class,1)-> select*from t_hibernate_book where book_id=?(1) resultSet-> 1 西游记 50 Book b=Class.forName(“com.zking.hibernate.entity.Book”).newInstanc

  • 懒加载:(lazy) 概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性。 目的:提供程序执行效率! lazy 值 true 使用懒加载 false 关闭懒加载 extra (在集合数据懒加载时候提升效率) 在真正使用数据的时候才向数据库发送查询的sql; 如果调用集合的size()/isEm

  • 只粘贴部分关键代码 1.简单查询 Session session = hibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("from Customer");

  • Hibernate多表查询时候应该注意的地方: 可以使用left join。 关于嵌套查询:  select * from (select * from users) 这种方式在hibernate中是行不到通的, 另外注意查询的sql语句是基于hibernate的PO对象的,而不是数据库表。 嵌套查询的时候可以使用in关键字,而不是使用from 关键字   下面给一个具体的实力,结合 distin

  • <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4

  • 1、在一对多的关联关系中,为保证DML的操作性能和灵活性,其独立实体方与函数依赖实体方的cascade都设置为none,而独立实体方的inverse=true,实体ID的生成策略是影响DML操作性能的一大因素,大多数情况下,native的性能比总是高于assigned,然而实体ID的生成策略更多的时候是取决于需求和业务设计 2、对实体的修改和删除而言应该针对独立实体和函数依赖实体分别执行,而不应该

  • Spring对Hibernated的Session和SessionFactory的管理<o:p></o:p> <o:p> </o:p> <o:p> </o:p> 获得Session:<o:p></o:p> 从Spring的HibernateDAOSupport中的getSession()方法中获得Session实际上为每个方法获得不同的Session,因为hibernateTemplate的isA

  • 1、问题 在ubuntu系统下,访问C盘的时候,报错: Windows is hibernated, refused to mount. 2、解决办法 sudo ntfs-3g -o remove_hiberfile /dev/sda3(磁盘名)   /media/xx/OS(路径名称)

 相关资料
  • 从戏剧!框架文档: Play2.0中没有内置的JPA实现;您可以选择任何可用的实现。例如,要使用Hibernate,只需将依赖项添加到项目中: 我的选择是什么而不是冬眠? 你认为什么最适合留言板网站? 我知道Hibernate有一点开销,对吗?

  • 本文向大家介绍什么是 ORM 框架?相关面试题,主要包含被问及什么是 ORM 框架?时的应答技巧和注意事项,需要的朋友参考一下 ORM(Object Relation Mapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对象。 使用 ORM 的优点:提高了开发效率降低了开发成本、开发更简单更对象化、可移植更强。

  • ORM(Object-relational mapping),对象关系映射。 是为了解决面向对象与关系型数据库存在的不匹配问题。 ORM框架的优点: 开发效率更高 数据访问更抽象、轻便 支持面向对象封装

  • 本文向大家介绍在Python的Django框架中创建语言文件,包括了在Python的Django框架中创建语言文件的使用技巧和注意事项,需要的朋友参考一下 当你标记了翻译字符串,你就需要写出(或获取已有的)对应的语言翻译信息。 这里就是它如何工作的。 地域限制 Django不支持把你的应用本地化到一个连它自己都还没被翻译的地域。 在这种情况下,它将忽略你的翻译文件。 如果你想尝试这个并且Djang

  • 嗨,我使用Play框架2.4.3和scala版本2.11我使用放心scala支持测试路线,但我得到 经过研究,我发现Junit导致了rest assured hamcrest matcher NoSuchMethodError的问题,hamcrest 1.3 这是构建。sbt文件内容 这是异常日志 请帮助说明导致异常的原因

  • 本文向大家介绍易语言的超文本浏览框实现,包括了易语言的超文本浏览框实现的使用技巧和注意事项,需要的朋友参考一下 添加一个按钮 页面内可以点击跳转 出现错误 解决办法 实验效果

  • 问题内容: 我有一个语言代码列表(如“ en”,“ es” …),我需要用以下语言显示: 是否有任何内置API可以在Android中获取这些文件,还是我应该自己映射它们? 问题答案: 该班有一个方法,这个:作为文档说: 返回此语言环境的语言名称,本地化为 。确切的输出形式取决于此语言环境是否对应于特定的语言,脚本,国家/地区和变体。 因此,您可以像这样获得语言环境的语言名称:

  • 本文向大家介绍易语言信息框添加图标的方法,包括了易语言信息框添加图标的方法的使用技巧和注意事项,需要的朋友参考一下 易语言信息框的制作很简单,但是怎么修改信息框的图标呢?下面小编为大家解决问题 1、打开易语言,选择Windows程序窗口 2、这里只需要一个按钮就足够了,如果需要其它的可以自己添加上去。 3、双击按钮进入编程界面,我们在这里编写程序。 4、然后输入一个信息框,这里的"0"的位置就是图