我刚刚开始将我自己开发的持久性框架迁移到JPA.
鉴于持久性框架隐藏了大量的管道,我有兴趣知道是否关闭EntityManagers会造成资源泄漏,或者框架是否会收集并关闭它们.
我打算在所有地方关闭它们,但我必须这样做吗?
目前使用TopLink,只是因为它可以轻松地与NetBeans协同工作,但我很乐意调查其他JPA提供商.
我刚刚更新到Hibernate 4.0并看到了警告消息:
HHH000387: ResultSet's statement was not registered
在我的日志文件中.这是什么意思,我应该担心吗?
我们正在尝试建立一个仅定期插入新记录的事务表.
这个简单的表要求我们不断添加新记录.此表中的事务量预计会非常高,并且可能会定期批量导入事务(> 1000),这可能需要几秒钟才能完成.
然后,我们从这些数据中执行一组select语句,将不同的列分组以返回所需的值.
从我们的初始测试中,我们发现了一个与SQL Server相关的瓶颈,它在INSERTS事务的中间阻塞了我们的SELECT.
下面是一个简单的示例,可用于说明问题.
- 简单的数据库表
create table LOCK_TEST (
LOCK_TEST_ID int identity ,
AMOUNT int);
Run Code Online (Sandbox Code Playgroud)
- 在1个查询窗口中运行此命令
begin tran
insert into LOCK_TEST (AMOUNT) values (1);
WAITFOR DELAY '00:00:15' ---- 15 Second Delay
insert into LOCK_TEST (AMOUNT) values (1);
commit
Run Code Online (Sandbox Code Playgroud)
- 在查询2中并行运行
select SUM(AMOUNT)
from LOCK_TEST;
Run Code Online (Sandbox Code Playgroud)
我希望查询2直接返回,0直到查询1完成,然后显示2.我们永远不希望看到从第二个查询返回1.
我们看到的答案与select语句中的WITH(NOLOCK)有关.但这违反了交易边界,返回的信息可能属于财务性质,我们不希望在查询中看到任何未提交的详细信息.
我的问题似乎是在INSERT方面...
为什么INSERT阻止SELECT语句,即使它没有修改任何现有数据?
奖励积分问题: 这是SQL Server的"功能",还是我们会在其他数据库版本上找到它?
更新 我现在有时间找到一个本地oracle数据库并运行相同的简单测试.这个测试通过我的预期.
即我可以根据需要经常运行查询,并且它将返回null,直到第一个事务提交,然后返回2.
有没有办法让SQL Server像这样工作?还是我们需要迁移到Oracle?
我们的subversion存储库已移至新主机,并且我们有连接到该主机的旧应用程序.我们无法为旧服务器添加旧名称的别名,我们如何将已检出的客户端重新连接到新的存储库?
我们希望对我们的项目做一些严格的安全性要求,我们需要进行大量高性能的加密.
我认为我知道PKI比对称加密慢得多且复杂得多,但我找不到数字来支持我的感受.
encryption performance encryption-asymmetric encryption-symmetric
假设我有一个名为Animal的简单Enum定义为:
public enum Animal {
CAT, DOG
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,如:
private static Object valueOf(String value, Class<?> classType) {
if (classType == String.class) {
return value;
}
if (classType == Integer.class) {
return Integer.parseInt(value);
}
if (classType == Long.class) {
return Long.parseLong(value);
}
if (classType == Boolean.class) {
return Boolean.parseBoolean(value);
}
// Enum resolution here
Run Code Online (Sandbox Code Playgroud)
}
我可以在这个方法中放入什么来返回我的枚举实例,其中value是classType的?
我看过尝试:
if (classType == Enum.class) {
return Enum.valueOf((Class<Enum>)classType, value);
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我正在尝试在我们的Jenkins服务器上设置一个构建来运行hibernate-core项目的分支.
我已经能够让Jenkins做git clone从我的github fork获取本地存储库,但是当Jenkins尝试运行'gradlew'命令时它失败了.
直接从签出文件夹运行此脚本时,构建按预期运行,但是当通过Jenkins启动脚本时,它会失败.
作业配置为Freestyle配置,构建步骤设置为"执行shell"步骤.
构建步骤运行以下命令.
./gradlew clean test install buildReleaseBundles uploadArchives --debug --stacktrace
似乎gradlew脚本正在执行,但在gradle Download类中出现问题.
我的构建脚本输出以下内容:
Building on master
Checkout:workspace / /data/hudson/jobs/hibernate-envers-stevemac/workspace - hudson.remoting.LocalChannel@63e4f703
Using strategy: Default
Last Built Revision: Revision 7cdb4c829f28c5b029a3d43f50a54d4c89fc9665 (origin/Branch_4.0.0.Final)
Checkout:workspace / /data/hudson/jobs/hibernate-envers-stevemac/workspace - hudson.remoting.LocalChannel@63e4f703
Fetching changes from 1 remote Git repository
Fetching upstream changes from https://stevemac007@github.com/stevemac007/hibernate-core.git
Commencing build of Revision 7cdb4c829f28c5b029a3d43f50a54d4c89fc9665 (origin/Branch_4.0.0.Final)
Checking out Revision 7cdb4c829f28c5b029a3d43f50a54d4c89fc9665 (origin/Branch_4.0.0.Final)
[workspace] $ /bin/sh -xe /tmp/tomcat6-tmp/hudson9191971611159378903.sh
+ ./gradlew clean test install buildReleaseBundles uploadArchives --debug --stacktrace
Downloading http://repo.gradle.org/gradle/distributions/gradle-1.0-milestone-3-bin.zip
Exception …Run Code Online (Sandbox Code Playgroud) 我有一个现在的数据库,我现在正在使用hibernate连接.我现在无法更改其中的数据,并使所有内容与单个列分开.
我有一个具有以下值的状态列:
该列映射如下:
@Column(name = "STATUS", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private TeamMemberStatus status;
Run Code Online (Sandbox Code Playgroud)
我真的希望(出于应用程序的原因)将此列映射为Java Enum(TeamMemberStatus),但由于'new'是Java中的关键字,我不能将其作为枚举成员.
如果我有enum contstants NEW,MAILED,IN和OUT hibernate失败,因为在EnumType内部它会执行一个Enum.valueOf().
有没有办法让我把它映射到我的Enum而不必编写复杂的UserType?
- 添加内容
我的Enum是这样的:
public enum TeamMemberStatus {
NEW, MAILED, IN, OUT
}
Run Code Online (Sandbox Code Playgroud)
是一个有效的Java枚举,但不匹配数据库的情况.如果我改变它以匹配数据库,如:
public enum TeamMemberStatus {
new, mailed, in, out
}
Run Code Online (Sandbox Code Playgroud)
它不会编译,因为'new'是Java保留字.
我们在过去几个月里使用Jersey(Java REST库)进行项目并喜欢它.但是本周JAXB遇到了一个问题.
我所拥有的是一个有两个孩子的元素,每个孩子都有孩子,他们的一些孩子互相参照.
让我展示一些代码.
Root root = new Root();
Parent parent1 = new Parent();
Parent parent2 = new Parent();
root.add(parent1);
root.add(parent2);
Child child1 = new Child();
Child child2 = new Child();
Child child3 = new Child();
parent1.add(child1);
parent1.add(child2);
parent2.add(child2);
parent2.add(child3);
Run Code Online (Sandbox Code Playgroud)
所以我们有1个根,2个父母和3个孩子.
如果我在JAXB路径上上下发送,我似乎找回了4个孩子.
每个Parent都有自己的child2副本.
反正有没有让JAXB序列化关系并显示parent1和parent2都指向同一个对象?
我们最近才发现这个问题,当时正在传输更复杂的元素.
如果没有办法让JAXB做到这一点(这就是我现在所相信的那样),有没有人有任何建议我可以在泽西岛做一些魔术以重新恢复关系?
我正在研究eclipse中的一个项目,当我使用jetty插件启动时给了我一个
java.lang.AbstractMethodError:
au.com.mycopmpany.impl.MyClassDAOImpl.findById(Ljava/lang/Integer;)Ljava/lang/Object;.
Run Code Online (Sandbox Code Playgroud)
这个文件在Eclipse中编译得很好,代码正在实现错误所讨论的方法.从我的阅读中,这个错误表明"在运行时"JVM发现一个没有实现此方法的类.
但我可以向你保证,MyClassDAOImpl最确定的findById方法是使用正确的签名实现该方法.
这似乎是Eclipse编译器中的一个错误; 我可以通过maven package从命令提示符运行然后在Eclipse中运行应用程序正常工作来解决问题.
似乎Eclipse编译器在此类中存在某种错误.我在网上读过一些关于Eclipse编译器中泛型错误的东西(这个类确实使用了Generics)但是这个基类/接口在我们的代码库中反复重复实现,这个类总是有问题.
有没有人知道解决方法,或者更好的是,解决这个问题?
我每次都可以复制此异常,因此如果Eclipse编译器开发人员阅读此内容并且这是一个已知问题,请随时与我联系以获取有关跟踪问题的帮助.
更新:
有问题的类是许多实现GenericDAOGeneric接口定义为的地方之一:
public interface GenericDAO<T, TList>
Run Code Online (Sandbox Code Playgroud)
有问题的方法是失败的:
public T findById(Integer integer) throws APIException;
Run Code Online (Sandbox Code Playgroud) java ×5
hibernate ×3
enums ×2
annotations ×1
eclipse ×1
encryption ×1
gradle ×1
jaxb ×1
jenkins ×1
jersey ×1
jetty ×1
jpa ×1
performance ×1
persistence ×1
sql-server ×1
svn ×1
toplink ×1