小编Fra*_*eth的帖子

使用JPA(Hibernate)查找包含给定记录的页面

如何知道JPA查询中记录的位置?

我有一个服务返回分页结果,或多或少实现了一个带有此签名的方法:

List<Record> getRecordsPage(long page, int pageSize);
Run Code Online (Sandbox Code Playgroud)

调用它时,我只需创建一个查询并进行如下配置:

TypedQuery<Record> query = entityManager.createQuery(criteriaQuery);
query.setFirstResult(page * pageSize);
query.setMaxResults(pageSize);
Run Code Online (Sandbox Code Playgroud)

这会将结果分页.这是按预期工作的,非常简单.

问题

我的另一个要求是实现一个方法来检索包含特定记录的页面.使用以下签名实现方法:

List<Record> getRecordsPage(Record record, int pageSize);
Run Code Online (Sandbox Code Playgroud)

此方法需要生成记录所在的右页.例如,对于getRecordsPage(RECORD4, 2)调用,考虑数据库状态:

1. RECORD1 
2. RECORD2 
3. RECORD3 
4. RECORD4 
5. RECORD5 
Run Code Online (Sandbox Code Playgroud)

返回的页面应为2 [RECORD3, RECORD4].

ORDER BY参数始终设置,可以是多个字段.

解决方案直到现在

到目前为止,我有一些解决方案:

  1. 一点也不好,但它解决了这个问题:

使用提供的查询我只选择没有分页的id并执行只是indexOf为了找到它的位置,并根据我可以找到记录页面的位置,然后使用getRecordsPage(long page, int pageSize)已经实现的常规过程.

  1. 不太好,因为与数据库高度耦合:

当我使用mySQL时,我可以执行一个类似的SQL:select r from (select rownum r, id from t order by x,y) z where z.id = :id什么会返回记录的位置,我可以使用它来调用getRecordsPage(long page, int …

java hibernate jpa criteria

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

H2群集设置

由于H2支持群集,因此过程非常类似于:

  • 启动服务器
  • 用于java org.h2.tools.CreateCluster在所需群集中复制数据库

并且知道CreateCluster期望一个目标,一个源和一个集群端点列表,我有以下问题:

  1. 当我说为了启动3个服务器(A,B和C)的集群时,我是正确的,我需要准确知道集群上的服务器数量,因为每个服务器都需要有用于SET CLUSTER语句的数据库服务器列表org.h2.tools.CreateCluster.process(String, String, String, String, String)方法调用.

    • 启动服务器A;
    • 启动服务器B;
    • 启动服务器C;
    • 在B机器CreateCluster上执行,A为源,B为目标,A,B,C为簇列表;
    • 在B机器CreateCluster上执行,以B为源,C为目标,A,B,C为簇列表;
  2. 假设我正在启动服务进程并启动A和B,应用程序开始在集群执行一些SQL.找不到C,C会被处理掉吗?

  3. 继续在第二个问题上启动启动过程,我启动了C,我已经准备好执行CreateClusterB作为源和A,B,C作为集群节点列表,在这个时刻发生了两件事:

    • B将被锁定在独占模式(SET EXCLUSIVE 2)由于CreateCluster
    • SQL SET CLUSTER 'A,B,C'将在B和C上执行

B被锁定时执行SQL是否在A中执行?如果是这样他们已经承诺?B被释放后,客户还在等待吗?之后会通知C这个命令吗?

java transactions cluster-computing h2

7
推荐指数
0
解决办法
1720
查看次数

Arduino + OV7670 - 无FIFO - 读取快照

我知道有很多关于OV7670的互联网(例如http://forum.arduino.cc/index.php?topic=159557.0),我读了很多关于它的内容,但似乎缺少了一些内容.

首先,我看看我们如何从相机逐像素地读取以构建矩形600 X 480图像的方式,考虑到文档中描述的HREF,VSYNCH和PCLOCK,这很容易理解:http:/ /www.voti.nl/docs/OV7670.pdf.我理解XCLOCK是一个输入,我需要将OV7670作为一种循环控制器给出,RESET可以重置它.

所以在这一点上,我认为通过连接以下引脚可以覆盖这种相机的功能:

  • D0..D7 - 用于连接到arduino数字引脚0到7的数据(像素)作为arduino板上的INPUT
  • XCLK - 用于连接到arduino数字引脚8的相机时钟,作为来自arduino板的OUTPUT
  • PCLK - 用于连接到arduino数字引脚9的像素时钟,作为arduino板上的INPUT
  • HREF - 定义何时线路开始/结束连接到arduino数字引脚10作为arduino板上的INPUT
  • VSYCH - 定义帧何时开始/结束连接到arduino数字引脚11作为arduino板上的INPUT
  • GRD - 与arduino GRD连接的地面
  • 3V3 - 3,3 INPUT连接到arduino 3,3v
  • 重置 - 连接到arduino RESET
  • PWDN - 连接到arduino GRD

从我的角度来看,这种方法的实现类似于:代码:

for each loop function do
   write high to XCLK

   if VSYNCH is HIGH 
      return;

   if HREF is LOW 
      return;

   if lastPCLOCK was HIGH and currentPCLOCK is LOW 
      readPixelFromDataPins();

end for
Run Code Online (Sandbox Code Playgroud)

readPixelFromDataPins()基本上只读了第一个字节(因为我只是测试我是否能从相机中读取内容),它的编写如下:

码:

byte readPixelFromDataPins() { …
Run Code Online (Sandbox Code Playgroud)

camera arduino clock

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

如何从try/catch块中获取变量?

我一直试图让这个正确的2天,我准备扔东西.....

我有一个JSONArray,我正在try/catch块中处理,但它似乎没有在最后传递变量.

我的代码:

try{
    //Get the element that holds the results ( JSONArray )
    JSONArray  getresults = json.getJSONArray("results");
    //Loop the Array
    for(int i=0;i < getresults.length();i++){                       
        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject e = getresults.getJSONObject(i);
        totalpass = e.getJSONObject(i).getString("ftotalpass");                         
    }                              

} catch(JSONException e)        {
    Log.e("log_tag", "Error parsing data "+e.toString());                                       
}
Run Code Online (Sandbox Code Playgroud)

我已尝试在try/catch块之前,之后,之后声明变量的所有庄园,但我无法将其传递给我的其余代码.

我究竟做错了什么?

java android

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

Java Map Implementation不基于HashCode

是否有一些java.util.Map不使用HashCode的实现?

我有以下问题:

  1. 我在HashMap上存储与另一个对象关联的对象;
  2. 从步骤1中使用的密钥对象更改属性;
  3. 由于哈希码用于在HashMap的常规实现上存储键,当我执行get()on时HashMap,我得到null,因为旧对象hashCode在步骤1中是不同的.

有解决方案吗?或者我应该只为我的equals/hashCode方法使用不可变字段?

java

5
推荐指数
2
解决办法
2447
查看次数

使用Solr4的OutOfMemory

我正在索引我的内容,并在将我的Solr实例升级到solr 4之后,我正面临着一些OutOfMemories.抛出的异常是:

INFO  org.apache.solr.update.UpdateHandler - start commit{flags=0,_version_=0,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false}
ERROR o.a.solr.servlet.SolrDispatchFilter - null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
        at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:469)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:297)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

是否有一些已知的错误或我可以测试的东西摆脱它?

在此升级中,有两件事发生了变

  • solr版本(从)3.44.0;
  • Lucene的匹配版本(从LUCENE_34LUCENE_40).

lucene solr

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

将 postgres 更改通知给 Java 应用程序

问题

我正在为几十万个产品构建一个postgres 数据库。我将设置一个索引(Solr 或 ElasticSearch)来改进复杂搜索查询的查询时间。

现在的重点是如何让索引与数据库同步?

在过去,我有一种应用程序会定期轮询数据库以检查应该完成的更新,但我会有一个过时的索引状态时间(从数据库更新到索引更新拉取)。

我更喜欢一种解决方案,其中数据库会通知我的应用程序(java 应用程序)数据库中的某些内容已更改,然后应用程序将决定是否需要更新索引。更准确地说,我将构建一种生产者和消费者结构,希望副本能够从 postgres 接收到某些更改的通知,如果这与索引的数据有关,则它会存储在一堆待办事项中。消费者将使用这个堆栈并构建要存储到索引中的文档。

可能的解决方案

一种解决方案是编写一种副本端点,在该端点中,应用程序将充当用于从原始数据库复制数据的 postgres 实例。有人对这种方法有经验吗?

对于这个问题,我还有哪些其他解决方案?

java postgresql indexing replication synchronization

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

表由Timestamp字段分区

为了生成一些摘要数据,我们定期将数据导入Hive.我们目前使用的是CSV文件格式,其布局如下:

operation,item,timestamp,user,marketingkey
Run Code Online (Sandbox Code Playgroud)

目前,我们有一些查询正在执行时间戳字段的日期(yyyy-mm-dd)分组.

正在导入的文件有时会保留更多天,我想以分区方式存储它.有没有办法用Hive做,我已经基于以下DDL构建表:

CREATE TABLE 
   partitionedTable (name string) 
PARTITIONED BY (time bigint) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
Run Code Online (Sandbox Code Playgroud)

数据加载完成如下:

LOAD DATA LOCAL INPATH 
   '/home/spaeth/tmp/hadoop-billing-data/extracted/testData.csv' 
INTO TABLE partitionedTable PARTITION(time='2013-05-01');
Run Code Online (Sandbox Code Playgroud)

但我希望该配置单元基于正在导入的文件中的字段以自动方式应用分区.例如:

login,1,1370793184,user1,none --> stored to partition 2013-06-09
login,2,1360793184,user1,none --> stored to partition 2013-02-13
login,1,1360571184,user2,none --> stored to partition 2013-02-11
buy,2,1360501184,user2,key1   --> stored to partition 2013-02-10
Run Code Online (Sandbox Code Playgroud)

hadoop hive

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

从核心转储中提取堆转储(hprof)

目前我有一个核心转储文件,我想提取堆转储。无论我尝试什么,我总是收到以下错误消息:

god@heaven:~$ sudo /opt/java-MyApp/bin/jmap -dump:format=b,file=my-file.hprof /opt/java-MyApp/bin/java /home/god/tmp/core
[sudo] password for god: 
Attaching to core /home/god/tmp/my-app-core-dump from executable /opt/java-MyApp/bin/java, please wait...
Error attaching to core file: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process)
sun.jvm.hotspot.debugger.DebuggerException: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process)
    at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:411)
    at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305)
    at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:156)
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:191)
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
    at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:83)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.tools.jmap.JMap.runTool(JMap.java:201)
    at …
Run Code Online (Sandbox Code Playgroud)

java coredump jvm jvm-hotspot heap-dump

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

Hibernate搜索(商店和索引)

@Field上index = Index.YES和store = Store.YES的内涵是什么?最后(当执行搜索时)是否会从数据库加载此数据(搜索索引并从数据库加载结果)?为什么我也要将数据存储在索引中呢?

或者我的理解错了吗?

java hibernate-search

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

GAE/Java:如何从给定的URL加载图像并获取图像的宽度和高度

我正在使用GAE [JAVA]进行一些图像处理.GAE不允许将文件写入磁盘,所以我希望我的App允许输入一个URL,然后我想检查这个指定的URL是否代表一个图像,如果是,我想得到它的高度和宽度.

有没有人提供一些解决方案来告诉我如何实现这个?

java google-app-engine image

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

如何处理许多用户更新文件驱动的nosql数据库

问题

从nosql文档数据库开始,我想出了许多新的可能性,但是,我看到了一些陷阱,我想知道如何处理它们.

假设我有一个产品,这个产品可以在很多地区销售.每个区域都有一个负责人(可以访问CMS).每个负责人相应地修改产品的区域法律和规则.

由于我们在关系数据库上不支持Join功能,因此文档的设计应该包含构建选择语句和选择结果所需的所有信息,避免往返数据库.

所以我的第一个是设计一个或多或少遵循这种结构的文档:

{
   type : "product",
   id : "product_id",
   title : "title",
   allowedAge : 12,
   regions : {
      'TX' : {
         title : "overriden title",
         allowedAge : 13
      },
      'FL' : {
         title : "still another title"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

但我的印象是这种方法会在更新文档时产生冲突.假设我们有很多用户通过CMS更新大量文档.更新同一文档时,上次更新会覆盖之前完成的更新,即使用户只能修改此文档的片段(在这种情况下,负责人应该只能修改区域数据).

如何应对这种情况?

我想到的一个可能的解决方案是部分文档更新.肯定:减少来自不同操作的数据覆盖,否定:失去乐观锁定功能,因为如果对文件进行锁定而不是这样的片段.

还有另一种解决方法吗?

nosql couchbase

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

java的fileWriter()函数是否适用于Linux类型的机器?

我正在使用java fileWriter()函数.它适用于Windows机器,但不适用于Linux.

所以我想知道fileWriter()函数是否仅适用于Windows,还是存在其他问题?

在此先感谢Enamul

java linux windows

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