标签: persistence

有没有办法在方法上更改JPA fetch类型?

有没有办法在不编辑实体对象的情况下在单个方法上更改JPA fetch类型?

我有一个由JPA实体类组成的共享ORM层.该ORM层由两个DAO层访问.一个DAO需要延迟抓取,因为它适用于我的Web应用程序,另一个需要急切的抓取,因为我需要它是线程安全的.

这是我的线程安全DAO的示例方法,

@PersistenceContext(unitName = "PersistenceUnit", type = PersistenceContextType.TRANSACTION)
private EntityManager em;

public ErrorCode findErrorCodeById(short id) {
    return (ErrorCode) em.createNamedQuery("ErrorCode.findById").
            setParameter("id", id).getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)

我如何使这个方法(或整个类)使用渴望获取?

persistence dao jpa thread-safety fetching-strategy

18
推荐指数
2
解决办法
3万
查看次数

如何制作复合主键(java持久性注释)

如何使表user_roles将两列(userID,roleID)定义为复合主键.应该很容易,只是记不住/找不到.

user实体中:

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles")
public List<RoleDAO> getRoles() {
    return roles;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getUserID() {
    return userID;
}
Run Code Online (Sandbox Code Playgroud)

roles实体中:

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles")
public List<UserDAO> getUsers() {
    return users;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getRoleID() {
    return roleID;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

**更多信息

因此,有一个第三表user_roles即花费(由上述自动生成)userIDuser实体和roleIDroles实体.现在我需要生成的table(user_roles)中的这两列是一个复合主键.

java persistence annotations many-to-many primary-key

18
推荐指数
2
解决办法
5万
查看次数

Android中类似iPhone的钥匙串?

我正在寻找类似iPhone上的钥匙串,但适用于Android开发.
使我有可能保存小键值对的东西,即使用户重新安装应用程序也是持久且不变的.

有类似的东西吗?我可以这样使用标准首选项吗?

我希望以某种方式实现一种行为,它可以在PC上将游戏写入另一个文件夹,以便在删除后再重新安装它们不会丢失.

编辑

赏金耗尽,没有人提到accountManager.我偶然发现了它.这不是实现我所描述的行为的方法吗?

android persistence keychain

18
推荐指数
1
解决办法
7461
查看次数

Ruby on Rails中的Web请求中存在哪些数据(如果有)?

我决定在创建视图助手类时使用单例设计模式.这让我思考; 单例实例是否会在请求中存活?这导致了另一个问题,哪些变量(如果有的话)在Web请求中存活,并且这取决于部署?(Fastcgi,Mongrel,Passenger,......)

我知道Controller实例变量没有持久化.我知道常量是持久的(或重新加载?).但我不知道类变量,类上的实例变量,Eigenclasses,......

singleton persistence controller ruby-on-rails

18
推荐指数
1
解决办法
5639
查看次数

php中的对象持久化

我是网络编程的新手,我过去主要使用java来创建桌面应用程序.

我试图找出如何在PHP中创建持久对象.也许持久性不是正确的词,我不希望对象对每个客户端都是唯一的,就像我通过在会话变量中序列化它一样.我希望在服务器上创建对象,并始终可以访问同一个对象.该对象将查询数据库并存储一些数据.这样,每个页面加载,php代码将从同一个持久对象获取该数据,而不是每次都必须查询数据库.

我目前正在使用单例模式进行对象创建,因为我最初的理解是它可以让我完成我想要的.部分对象是一个数组,当我执行一个向数组添加值的php页面,并在同一页面上访问该值时,它很好.但是,当我向数组添加一个值,然后加载另一个访问该值的页面时,该数组将返回为空.

这可能吗?我是否过度反应认为查询数据库这么多是不好的?在任何一秒钟内,有时会有多达20个用户请求数据,我觉得每次查询数据库都是荒谬的.

谢谢

php persistence object

18
推荐指数
2
解决办法
2万
查看次数

是什么让Smalltalk能够进行图像持久化,为什么像Ruby/Python这样的语言不能自行序列化?

在smalltalk中,您可以将世界状态保存到图像文件中.我认为这与Smalltalk自身"序列化"的能力有关 - 也就是说,对象可以生成自己的源代码.

1)这是一个准确的理解吗?

2)将这种能力添加到现代语言中的挑战是什么(非lisp,显然)?

3)"序列化"是正确的词吗?什么是正确的行话?

serialization persistence smalltalk interpreted-language

18
推荐指数
2
解决办法
753
查看次数

寻找基于磁盘的类似redis的数据库

我目前正在为我的应用程序使用Redis,它的功能非常适合我的应用程序(列表,集合,排序集等).

我的应用程序在很大程度上依赖于排序集,列表,集合.和他们相关的功能(推送到列表,获取列表,集合的联合等.我现在面临的唯一问题是我的数据很大,我的大部分数据都不需要在内存中,我想要将它们存储在磁盘上.

**我需要一个带有redis数据结构的磁盘数据库**

我读到了Cassandra,但我不确定它是否支持排序集,集,列表.或者至少如果确实如此,我找不到像Redis那样操纵它们的方法.

谢谢.

database persistence nosql redis

18
推荐指数
3
解决办法
8822
查看次数

如何在进行TDD时最好地创建测试数据库?

在执行ASP.NET站点(例如ASP.NET MVC站点)时创建测试持久层的最佳实践是什么?

我见过的很多例子都在单元测试项目中使用了Moq(或其他模拟框架),但我想,像moq我的持久层,以便我的网站显示数据和内容,但它不是来自数据库.我想做到最后.我见过的所有嘲弄的东西只存在于单元测试中.

当人们想要(stub?)伪造一个持久层来快速快速开发时,人们会采取什么样的做法?我使用依赖注入来处理它,并为我的持久层提供一些硬编码结果(这实际上是手动和无聊的).

其他人在做什么?示例和链接会很棒:)

UPDATE

只是一点点更新:到目前为止,我已经获得了一个假的存储库和一个SQL存储库 - 每个类实现一个接口.然后,使用DI(我正在使用StructureMap),我可以在我的虚拟存储库或SQL存储库之间切换.到目前为止,它运作良好:)

(也是可怕的想到我差不多11个月前问过这个问题,从我编辑这个问题开始,现在!)

asp.net tdd persistence dependency-injection mocking

17
推荐指数
1
解决办法
1209
查看次数

merge vs find更新实体JPA

Pro EJB3 JPA一书中:

在使用JPA的Java EE应用程序中处理此(-update实体)的最常见策略是将更改的结果放入分离的实体实例中,并将挂起的更改合并到持久性上下文中,以便将它们写入数据库

例如: EMP参数是分离实体

@Stateless
public class EmployeeServiceBean {
    @PersistenceContext
    EmtityManager em;

    public void updateEmployee(Employee emp){
       if(em.find(Employee.class, emp.getId()) == null){
           throw new IllegalArgumentException("Unknown Employee id")
       }

       em.merge(emp);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,说:

如果使用的信息量非常小,我们可以通过查找托管版本并手动将更改复制到其中来完全避免分离对象和merge()操作.

示例: 此处附有emp

public void updateEmployee(int id, String newName, long newSalary) {
    Employee emp = em.find(Employee.class, id);
    if(emp==null){
        throw new IllegalArgumentException("Unknown Employee id")
    }
    emp.setEmpName(newName);
    emp.setSalary(newSalary);
}
Run Code Online (Sandbox Code Playgroud)

因此,看起来像小更新和创建操作策略find()然后逐个设置新值是方便的.但是!对于数据的大更新(即集合)是首选的,有一个分离的实体和所有它的关系(与CascadeType.Merge)并做大merge().

好的,但为什么呢?

java persistence jpa java-ee

17
推荐指数
1
解决办法
2万
查看次数

AnnotationException:外键引用的列数错误.应该是2

我将我的类映射到我的数据库的表,但在运行测试时,我收到以下错误:

Caused by: org.hibernate.AnnotationException: A Foreign key refering com.modulos.pvs.acceso.datos.entity.Provincia from com.modulos.pvs.acceso.datos.entity.Ciudad has the wrong number of column. should be 2
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:429)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:115)
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1550)
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1473)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1389)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
    ... 40 more
Run Code Online (Sandbox Code Playgroud)

这些是我的课程:

//    PROVINCIA TABLE
    @Entity
    @Table(name="provincia")
    @NamedQuery(name = "Provincia.findAll", query = "SELECT p FROM Provincia p")
    public class Provincia implements Serializable {

        private static final long serialVersionUID = 1L;

        @EmbeddedId
        private ProvinciaPK id;

        private String nombreProvincia;

        // …
Run Code Online (Sandbox Code Playgroud)

orm persistence hibernate jpa hibernate-mapping

17
推荐指数
2
解决办法
3万
查看次数