小编RoD*_*RoD的帖子

管理事务回滚

我的注释有问题@Transactional.

我有一种做某些东西的方法,而且我在里面扔了一个东西IllegalArgumentException.

我认为(即使我已经捕获了异常)它将事务设置为rollbackOnly(异常抛出时的一些触发器)并且它结束而没有成功提交事务.

这是错误:

org.springframework.transaction.TransactionSystemException : Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
Run Code Online (Sandbox Code Playgroud)

我可以添加@Transactional一个无回滚 - 我抛出和捕获的异常,但我不认为这是一个真正的解决方案.

也许有一种方法可以取消对事务的rollbackOnly,但我认为这也不是最好的做法......

所以,你知道我该怎么办?

谢谢,

java spring hibernate jpa

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

JPA/Hibernate Embedded id

我想做那样的事情:

  • ReportingFile对象,可以是LogRequest或LogReport文件.(两者都有相同的结构)
  • 一个对象报告包含一个logRequest,一个带有日期的logReport列表.

我试着设置一个EmbededId,这将是logRequest的一个属性.这就是我遇到的问题.我没有到达mannage嵌入式id.(http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier)

如果你有一个关于我应该怎么做的线索:)

一个例子(不工作)将是:

@Entity
@AssociationOverride( name="logRequest.fileName", joinColumns = { @JoinColumn(name="log_request_file_name") } )
public class Reporting {

    @EmbeddedId
    private ReportingFile logRequest;

    @CollectionOfElements(fetch = FetchType.EAGER)
    @JoinTable(name = "t_reports", schema="", joinColumns = {@JoinColumn(name = "log_report")})
    @Fetch(FetchMode.SELECT)
    private List<ReportingFile> reports;

    @Column(name="generated_date",nullable=true)
    private Date generatedDate;

    [...]
}

@Embeddable
public class ReportingFile {

    @Column(name="file_name",length=255)
    private String fileName;

    @Column(name="xml_content")
    private Clob xmlContent;

    [...]
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,我有以下错误:

    15.03.2010 16:37:59 [ERROR] org.springframework.web.context.ContextLoader       Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in class …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa java-ee

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

Spring Transaction无法在服务上打开

我想设置@Transactional我的服务而不是我的DAO ......为了打开事务并能够在我的服务中使用一些惰性集合而不会得到一些"LazyInitializationException".

@Transactional直到DAO 现在,并且在进入DAO并退出时,交易被打开和关闭.

现在,凭借@Transactional我的服务,甚至没有打开交易.所以服务调用DAO没有打开任何事务,我们得到了以下异常:org.hibernate.SessionException:会话关闭!

我们在Hibernate上使用JPA,这是我们配置的摘录:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"/>  

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

编辑,感谢您的回复/评论:所以,我在整个服务(实现而不是界面)上声明@Transactional而不是方法,以确保@Transactional将适用于所有.

@Transactional
public class MyServiceImpl implements MyService {
  public void method1(){...}
  public void method2(){...}
}
Run Code Online (Sandbox Code Playgroud)

我还为您提供了配置DAO的方式,它们都扩展了以下类:

public abstract class JpaDAOSupport {
  protected EntityManager em;
  @PersistenceContext(type = PersistenceContextType.TRANSACTION)
  public void setEm(EntityManager em) {
    this.em = em;
  }
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:我简化了我的应用程序,以便只有1个服务和1个DAO.

为MyService:

@Transactional
public class MyServiceImpl implements MyService {

  private MyDAO myDAO;

  public void …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa transactions

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

使用注释将默认值注入Spring bean

我想使用注释为bean中的列表设置默认值.

例如,如果它不是列表,您可以执行以下操作:

@Value("myValue")
String test;
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,我想为List of String提供默认值.

List<String> tests;
Run Code Online (Sandbox Code Playgroud)

在XML中,它是这样的:

<bean id="beanId" class="class...">
    <property name="tests">
        <list>
            <value>value 1</value>
            <value>value 2</value>
            <value>value 3</value>
        </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有现有的注释,或者我是否需要创建注释?

谢谢

java spring annotations javabeans

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

正则表达式静态组问题

我有粗糙的几个字符串:

[带一个或两个数字的某个数字] [某些文字] [ABC或BC的文字] [某些文字]

String test = "12testABCtest";
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)");
Run Code Online (Sandbox Code Playgroud)

但是它总是让我"在第3组中取代BC而不是ABC."因为它包括前一组中的A

你知道怎么做吗?

谢谢,

java regex

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

逃避XML字符的最佳做法?

我有html数据,我正在转换成Dom4J文档.

我遇到了一个错误:

org.dom4j.DocumentException: Error on line 1 of document  : Reference is not allowed in prolog. Nested exception: Reference is not allowed in prolog.
    at org.dom4j.io.SAXReader.read(SAXReader.java:482)
    at org.dom4j.DocumentHelper.parseText(DocumentHelper.java:278)
    at MonTest.main(MonTest.java:21)
Nested exception: 
    org.xml.sax.SAXParseException: Reference is not allowed in prolog.
Run Code Online (Sandbox Code Playgroud)

这是一个"&",我需要逃进& 为了构建文档.

在XML中,似乎我们需要转义5个字符:(gt,lt,quot,amp,apos)

然而,我怎么能逃脱它,而不是逃避它到"节点"元素:

<div id="test" class='toto'>A&A<A"A</div>
Run Code Online (Sandbox Code Playgroud)

应该给:

<div id="test" class='toto'>A&amp;A&lt;A&quot;A</div>
Run Code Online (Sandbox Code Playgroud)

并不是

&lt;div id=&quot;test&quot; class=&apos;toto&apos;&gt;A&amp;A&lt;A&quot;A&lt;/div&gt;
Run Code Online (Sandbox Code Playgroud)

谢谢,

java xml escaping dom4j java-ee

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

标签 统计

java ×6

hibernate ×3

jpa ×3

spring ×3

java-ee ×2

annotations ×1

dom4j ×1

escaping ×1

javabeans ×1

regex ×1

transactions ×1

xml ×1