我有一组@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层都是创建一个新事务,执行更改,提交事务和返回.
但是,如果我注释抽象超类 …
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)
有人能告诉我上面做的"正确"方法是什么吗?
顺便说一下,我已经看了相关的问题,我理解他们发生了什么,但这似乎与其中任何一个都不匹配.
我需要创建一个静态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常量String和int值使用常量.
编辑:为了阐明我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) 我相当熟悉Vim的供选择tabstop,softtabstop,shiftwidth,expandtabs,等.
但是,我想知道在Vim中是否有办法设置特定的列标签停止.
我需要以下列中的制表位:7,11,14,17,...之后每3个.
在此先感谢
我有一个遗留数据库(实际上是Cobol文件),我使用Hibernate/JPA的专有JDBC驱动程序访问.
实体有一个包含2列的复合主键:CODE和SITE.
在传统的数据存在针对相同的记录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 @Type的site列上添加一个定义,那么我可以成功地从SELECT查询中获取非空实体,该site字段包含我定义的任何String文本作为其表示null.
但是,它仍然表现不同.所述find返回一个实体与所述site字段包含null,但该查询返回的实体与site包含"南"(的默认表示字段null …
我正在使用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的精度/比例?
我按照https://github.com/cisco/openh264中提到的所有说明进行操作,但我无法完成.该信息在链接中引用,但它非常令人困惑.
我们有一个非常简单的表,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) 我们有一个应用程序在服务器上使用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) 有人可以给我一个有用的链接,在那里我可以找到有关转换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)