小编Bah*_*mus的帖子

Spring @Transactional Annotation:自我调用

我知道当从同一个类内部调用事务方法时,它不会在事务中运行.Spring为事务方法创建一个代理,并将它们包装在try-catch块中,并在发生异常时回滚.请考虑以下情形:

@Transactional
public void saveAB(A a, B b)
{
    saveA(a);
    saveB(b);
}

@Transactional
public void saveA(A a)
{
    dao.saveA(a);
}

@Transactional
public void saveB(B b)
{
    dao.saveB(b);
}
Run Code Online (Sandbox Code Playgroud)

假设从另一个对象调用saveAB并在saveB中发生异常,因此saveA成功完成但saveB没有成功.据我所知,即使saveA和saveB不是事务性的(因为它们是从同一个对象调用的),因为saveAB是事务性的,它仍然应该回滚.

我不明白为什么人们说自我调用打破了交易?只要调用方法是事务性的,不应该按预期工作吗?这里有什么我想念的吗?

java spring hibernate transactional self-invoking-function

11
推荐指数
2
解决办法
4577
查看次数

在Spring中为@NumberFormat使用不同的Locale

我正在开发一个Spring 3项目,我需要Long为土耳其货币格式化一个字段.Locale应用程序的默认值是en_US.我使用了@NumberFormat如下注释:

@NumberFormat(style=NumberFormat.Style.CURRENCY)
public Long getBudgetLimit() {
    return budgetLimit; 
}
Run Code Online (Sandbox Code Playgroud)

注释用于处理英语区域设置中的表单字段.但是,我需要在此字段中使用土耳其语区域设置.有没有办法设置单个字段或不同于应用程序区域设置的页面的区域设置?

编辑:我刚刚找到了答案.在控制器中使用自定义编辑器,如下所示:

NumberFormat numberFormat = NumberFormat.getNumberInstance(new Locale("tr","TR"));
dataBinder.registerCustomEditor(Long.class, new CustomNumberEditor(Long.class,numberFormat, true));
Run Code Online (Sandbox Code Playgroud)

并且不要使用@NumberFormat注释.出于同样的原因,它给了我一个错误.

spring locale number-formatting

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

我可以在接口上使用 @MappedSuperclass 注释吗?

我想在一个组共同映射interface,但我不能使用abstract superclass,因为我已经实体扩展另一个class。所以我需要一个像下面这样的界面:

@MappedSuperclass
public interface NamedEntity {
    @Column(name = "name")
    String getName();
    void setName(String name);
}
Run Code Online (Sandbox Code Playgroud)

我想像下面这样使用它:

public class Person {
    private Long id;
    private 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; }
}

@Entity
@Table(name = "person_entity")
public class PersonEntity extends Person implements NamedEntity {
    @Id
    @GeneratedValue
    @Column(name = "id") …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa mappedsuperclass

4
推荐指数
1
解决办法
1814
查看次数

如何在iReport中显示CLOB(或BLOB)字符串?

我需要在iReport中的文本字段中显示长度超过4000个字符的CLOB字段.我正在使用iReport版本5.5.0,我尝试将CLOB转换为InputStream,但它不起作用,我得到的是:

java.io.ByteArrayInputStream@43842a66
Run Code Online (Sandbox Code Playgroud)

我尝试了getSubString(long,int)但它只适用于小于4000个字符的字符串.stringValue()和toString()也不起作用.

谢谢你的帮助.

编辑:

Clob.getSubString(long,int)方法在后面的测试中运行良好,我不知道为什么之前没有用.所以我用过:

$F{FIELD}.getSubString( (long)1, (int)$F{FIELD}.length() )
Run Code Online (Sandbox Code Playgroud)

最终.它可能不是最好的选择,但我认为字符串的最大长度(2147483647)对于该字段来说已经足够了.

java blob clob jasper-reports ireport

3
推荐指数
1
解决办法
7504
查看次数