小编Dun*_*ear的帖子

Spring @Transactional继承规则

我有一组@Servicebean从一个抽象类继承核心功能.我用@Service和标记了每个具体的子类服务@Transactional.抽象超类包含每个服务的公共入口点方法.换句话说,我有类似于以下内容:

abstract class AbstractService {

    public void process() {
        // Do common initialisation code here
        processSpecific();
        // Do common completion code here
    }

    abstract protected void processSpecific();
}


@Service @Transactional
public class FirstSpecificService extends AbstractService {
    protected void processSpecific() {
        // Do specific processing code here
    }
}


@Service @Transactional
public class SecondSpecificService extends AbstractService {
    protected void processSpecific() {
        // Do different specific processing code here
    }
}
Run Code Online (Sandbox Code Playgroud)

每个具体子类服务中的特定代码对DAO层进行多次调用以对数据库进行更改,这些更改具有REQUIRED事务传播类型.

现在使用上面定义的服务,我发现在这些具体的子类服务的任何代码中都没有当前事务,并且每次调用DAO层都是创建一个新事务,执行更改,提交事务和返回.

但是,如果我注释抽象超类 …

java service spring transactional

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

盒装值未装箱然后重新装箱

FindBugs给我一个关于以下行的警告,其中invoiceNumber是一个Integer对象:

text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
Run Code Online (Sandbox Code Playgroud)

警告是:"盒装值未装箱,然后立即重新装箱"

现在我觉得我理解(联合国)拳击,但我看不出你怎么会在没有得到警告的情况下做同样的事情?

我发现我可以使用以下代码来消除警告,但这似乎更加冗长:

int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Run Code Online (Sandbox Code Playgroud)

有人能告诉我上面做的"正确"方法是什么吗?

顺便说一下,我已经看了相关的问题,我理解他们发生了什么,但这似乎与其中任何一个都不匹配.

java boxing unboxing findbugs

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

如何创建一个静态Map of String - > Array

我需要创建一个静态Map,将给定String的数组映射到int.

换句话说,我想定义类似的东西:

"fred" -> {1,2,5,8}
"dave" -> {5,6,8,10,11}
"bart" -> {7,22,10010}
... etc
Run Code Online (Sandbox Code Playgroud)

在Java中有一种简单的方法吗?

如果可能的话,我想对static常量Stringint值使用常量.

编辑:为了阐明我static对值的常量的意义,并给出我认为正确的代码,这是我对解决方案的第一次尝试:

public final static String FRED_TEXT = "fred";
public final static String DAVE_TEXT = "dave";

public final static int ONE = 1;
public final static int TWO = 2;
public final static int THREE = 3;
public final static int FOUR = 4;

public final static HashMap<String, int[]> myMap = …
Run Code Online (Sandbox Code Playgroud)

java static map

13
推荐指数
3
解决办法
5万
查看次数

设置特定列选项卡在Vim中停止

我相当熟悉Vim的供选择tabstop,softtabstop,shiftwidth,expandtabs,等.

但是,我想知道在Vim中是否有办法设置特定的列标签停止.

我需要以下列中的制表位:7,11,14,17,...之后每3个.

在此先感谢

vim indentation

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

JPA Query返回空值 - 具有空列的Composite Key

我有一个遗留数据库(实际上是Cobol文件),我使用Hibernate/JPA的专有JDBC驱动程序访问.

实体有一个包含2列的复合主键:CODESITE.

在传统的数据存在针对相同的记录CODE是可以有一个特定的值SITE,或者可以有与空记录SITE柱代表"所有网站".这个文件的理论是,如果你找不到CODE特定的,SITE那么你在SITE('catch-all')中查找带有NULL的记录.

我不能改变这个'表'的结构,因为它将涉及重写我们不想做的传统Cobol系统的大部分.我也无法创建数据视图.

现在,当我em.find使用包含特定code和null 的主复合键类时site,Hibernate正确地在列中找到具有NULL值的匹配记录 - 一切都好!

但是,如果我尝试使用em.createQuery类似于以下内容进行查询:

SELECT x FROM TareWeight x WHERE x.pk.code = 'LC2'
Run Code Online (Sandbox Code Playgroud)

如果有2条记录,它会在结果列表中为SITE列中的NULL返回一个空对象.

如果我使用Hibernate用于此查询的SQL,那么'database'将返回两条记录,一条记录具有NULL站点,另一条记录具有特定站点.似乎当Hibernate从这些结果加载实体时,它将它映射到空Entity对象.

所以要么Hibernate支持它,要么它不支持它.为什么em.find工作而不是em.createQuery

我知道这个问题很相似,但答案似乎表明这是不可能的.但显然Hibernate可以正确地进行查找,那么为什么查询不起作用呢?


编辑:好的,所以我NullableStringType这个Hibernate JIRA问题上找到了一个类定义,并将它添加到我的项目中.

如果我使用这个类型类在PK @Typesite列上添加一个定义,那么我可以成功地从SELECT查询中获取非空实体,该site字段包含我定义的任何String文本作为其表示null.

但是,它仍然表现不同.所述find返回一个实体与所述site字段包含null,但该查询返回的实体与site包含"南"(的默认表示字段null …

java sql hibernate jpa composite-primary-key

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

Hibernate - Custom Dialect的BigDecimal列映射

我正在使用Hibernate作为我们的对象关系映射,使用一个隐藏数据库的自定义方言.

我从这个数据库中检索的实体有一列:

    @Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
    private BigDecimal grossWeight;
Run Code Online (Sandbox Code Playgroud)

数据库将此列定义为数字,精度为9,标度为3.

我可以看到Hibernate生成的SQL来检索数据,当我使用数据库查询工具执行相同的Query时,它会返回GROSS_WEIGHT列的"9.68".

但是,在由Hibernate检索的实体中,'grossWeight'字段包含值'10',其中scale0和precision2 为0 !

在我正在使用的自定义方言类中,我尝试重写以下列类型:

        registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
        registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
        registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
Run Code Online (Sandbox Code Playgroud)

但它仍然只返回(舍入的)整数.

这在我们使用Postgres方言从Postgres检索对象的应用程序的其他地方有效.

知道我应该在方言中做什么,所以我可以让Hibernate正确设置检索到的BigDecimal的精度/比例?

java hibernate jpa bigdecimal hibernate-mapping

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

无法为Windows构建OpenH264.lib

我按照https://github.com/cisco/openh264中提到的所有说明进行操作,但我无法完成.该信息在链接中引用,但它非常令人困惑.

windows build openh264

8
推荐指数
2
解决办法
3116
查看次数

Postgres-单记录更新速度超过10版

我们有一个非常简单的表,DDL如下:

CREATE TABLE public.next_id (
  id varchar(255) NOT NULL,
  next_value int8 NOT NULL,
  CONSTRAINT next_id_pk PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

该表仅包含约120行,除主键外没有任何索引。

当我在DBeaver中对运行PostgreSQL 10.5或11.2的两台Linux服务器之一执行以下UPDATE查询时,大约需要50毫秒:

update NEXT_ID set next_value=next_value+1 where id='Session';
Run Code Online (Sandbox Code Playgroud)

但是,如果我将DBeaver指向运行PostgreSQL 9.5.3的服务器,则平均大约需要3毫秒。

现在,如果我创建一个FOR循环,如下所示:

do $$
begin
    for i in 1..100000 loop
        update NEXT_ID set next_value=next_value+1 where id='Session';
    end loop;
end;
$$;
Run Code Online (Sandbox Code Playgroud)

在所有机器上花费大约相同的时间(〜1.5s)。换句话说,错误容限可能等同于一条记录更新所经历的额外延迟。

感觉语句周围的事务涉及某种开销。

如何获得有关PostgreSQL花时间的更多信息?

我尝试EXPLAIN ANALYSE在“较慢”的服务器上对上述单条记录UPDATE进行操作,我得到以下信息:

Update on next_id  (cost=0.00..2.58 rows=1 width=36) (actual time=0.057..0.057 rows=0 loops=1)
  ->  Seq Scan on next_id  (cost=0.00..2.58 rows=1 width=36) (actual time=0.043..0.044 rows=1 loops=1)
        Filter: ((id)::text …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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

Spring/JPA/Hibernate可以使用简单的JDBC兼容驱动程序吗?

我们有一个应用程序在服务器上使用Spring容器,它使用EJB3实体和Hibernate来持久保存PostgreSQL数据库中的数据.

我想使用单独的EntityManager将另一个连接添加到单独的数据库,但DBMS(Trifox Vortex)的供应商没有DataSource类型驱动程序.

Hibernate EntityManager可以使用简单的JDBC兼容驱动程序来实现实体的EJB3 JPA持久性吗?

我需要为我正在连接的DBMS使用特定的Hibernate Dialect吗?

对于它的价值,这里是我们当前的Spring实体管理器工厂的XML定义:

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="UniWorks-EntityPersistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaDialect">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    </property>
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="showSql" value="${db.showsql}"/>
        <property name="generateDdl" value="${db.generate}"/>
        <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect"/>
      </bean>
    </property>
    <property name="jpaProperties">
      <props>
        <prop key="hibernate.hbm2ddl.auto">${db.hbm2ddl}</prop>
      </props>
    </property>
  </bean>
Run Code Online (Sandbox Code Playgroud)

更新/进展: 2013年3月21日

经过与供应商的多次交流后,我设法让他们的JDBC驱动程序使用简单的Java测试程序.

不幸的是,他们的JDBC驱动程序显然不足以让Hibernate获取足够的信息,因为Spring无法使用以下堆栈跟踪创建EntityManagerFactory:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundle://222.0:0/META-INF/spring/cobol.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: UniWorks-CobolPersistenceUnit] Unable to build EntityManagerFactory
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)[58:org.springframework.beans:3.1.1.RELEASE] …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jdbc entitymanager

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

Jenkins xml配置为基于Groovy的Jenkins Job DSL

有人可以给我一个有用的链接,在那里我可以找到有关转换Jenkins作业的复杂 xml配置的信息吗?

这是一个Jenkins工作示例:

<project>
    <actions/>
    <description>Description</description>
    <logRotator class="hudson.tasks.LogRotator">
        <!-- ...-->
    </logRotator>
    <keepDependencies>false</keepDependencies>
    <properties>
        <hudson.model.ParametersDefinitionProperty/><!-- ...-->
    </properties>
    <scm class="org.jenkinsci.plugins.multiplescms.MultiSCM" plugin="multiple-scms@0.5">
        <scms>
            <hudson.plugins.git.GitSCM plugin="git@2.4.0"/><!-- ...-->
            <hudson.plugins.git.GitSCM plugin="git@2.4.0"/><!-- ...-->
        </scms>
    </scm>
    <canRoam>true</canRoam>
    <disabled>false</disabled>
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
    <jdk>Default</jdk>
    <triggers>
        <hudson.triggers.TimerTrigger/><!-- ...-->
    </triggers>
    <concurrentBuild>false</concurrentBuild>
    <customWorkspace>$HUDSON_WD/$REVISION/checkout</customWorkspace>
    <builders/>
    <publishers>
        <hudson.plugins.globalenvvar.GlobalEnvironmentVariablePublisher plugin="globalenvvar@1.0"/><!-- ...-->            
        <hudson.plugins.parameterizedtrigger.BuildTrigger plugin="parameterized-trigger@2.28"/><!-- ...-->
        <hudson.plugins.templateproject.ProxyPublisher plugin="template-project@1.5"/><!-- ...-->
    </publishers>
    <buildWrappers>
        <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.7.2"/>
    </buildWrappers>
</project>
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-job-dsl

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