小编Kyl*_*ull的帖子

有没有办法为Hibernate管理的对象声明最终字段?

我刚刚开始使用Hibernate,到目前为止我看到的所有示例看起来都非常像Hibernate文档中的教程:

package org.hibernate.tutorial.domain;
import java.util.Date;

public class Event {

    private Long id;
    private String title;
    private Date date;

    public Event() {}

    /* Accessor methods... */
}
Run Code Online (Sandbox Code Playgroud)

具体来说:没有任何字段被声明为final,并且必须有一个无参数构造函数,以便Hibernate框架可以实例化该类并设置其字段.

但事情就是这样 - 我真的不喜欢每当我能避免它时就以任何方式使我的类变得可变(Java实践:不可变对象为此做出了相当强烈的论据).那么,即使我要声明每个字段的"最终",有没有办法让Hibernate工作

我知道Hibernate使用Reflection来实例化它的类,因此需要能够调用某种构造函数,而不会冒险选择错误的构造函数或将错误的值传递给它的一个参数,所以它可能更安全调用no-arg构造函数并一次设置一个字段.但是,是否应该可以向Hibernate提供必要的信息,以便它可以安全地实例化不可变对象?

public class Event {

    private final Long id;
    private final String title;
    private final Date date;

    public Event(@SetsProperty("id") Long id,
        @SetsProperty("title") String title,
        @SetsProperty("date") Date date) {

        this.id = id;
        this.title = title;
        this.date = new Date(date.getTime());
    }

    /* Accessor methods... */
} …
Run Code Online (Sandbox Code Playgroud)

java hibernate final pojo

23
推荐指数
3
解决办法
8771
查看次数

迁移应用程序以使用Guice - 如何将事务注入现有对象?

我是Guice的新手,我正在使用大量遗留代码的应用程序.它有几个类看起来像这样:

public final class DataAccessClass {

    private Transaction txn;

    @Inject //This was just added
    public DataAccessClass(/* injectable parameters */, Transaction txn) {

        this.txn = txn;
    }

    //Maybe add @Inject here to set a new transaction when it changes?
    public void setTransaction(Transaction txn) {

        this.txn = txn;
    }

    public void writeData(/* parameters for data to be written */) {

        //Write data using the current instance of 'txn'
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显如何使用Guice绑定永不改变的实例,但是那些确实发生变化的实例(即事务)呢?有没有办法让我在改变时使用Guice注入不同的Transaction实例? 请注意,Transaction实例不是受到良好支持的JPA/Hibernate/Spring事务之一

我能想到的最少侵入性方法(避免需要同时迁移每个使用事务的类)将使用Guice仅在实例化对象时注入Transaction,并且我会保留现有的应用程序代码,以便在必要时更新事务.例如,此Provider可用于向当前的Transaction实例注入新对象:

public final class TransactionProvider implements Provider<Transaction> {

    /** Nullable …
Run Code Online (Sandbox Code Playgroud)

migration transactions guice

8
推荐指数
1
解决办法
1865
查看次数

如何在R6RS Scheme中抛出和处理异常

在R6RS计划中抛出和捕获异常的标准方法是什么?我正在寻找适用于实现R6RS的任何版本的Scheme(不仅仅是PLT)的语法.

R6RS防护语法看起来可能适合该法案,但是有人能告诉我如何实际使用它的例子吗?

scheme exception

7
推荐指数
1
解决办法
1855
查看次数

方案:检测列表中的重复元素

R6RS或Chez Scheme v7.9.4是否具有库函数来检查列表是否包含重复元素?

或者,是否具有集合的任何内置功能(允许重复元素)?到目前为止,我只能在这里找到一个例子.

问题在于它实际上并不是Chez Scheme库的一部分.虽然我可以编写自己的版本,但我更倾向于使用一个众所周知,经过测试和维护的库函数 - 特别是考虑到这是一个基本的操作.

因此,简单的"使用这些内置函数"或"没有内置库实现这一点"就足够了.谢谢!

scheme list set chez-scheme

5
推荐指数
1
解决办法
2132
查看次数

标签 统计

scheme ×2

chez-scheme ×1

exception ×1

final ×1

guice ×1

hibernate ×1

java ×1

list ×1

migration ×1

pojo ×1

set ×1

transactions ×1