小编gut*_*tch的帖子

添加到集合然后对其进行排序或添加到已排序的集合是否更快?

如果我有Map这样的:

HashMap<Integer, ComparableObject> map;
Run Code Online (Sandbox Code Playgroud)

我想获得一个使用自然排序排序的值集合,哪种方法最快?

(一个)

创建可排序集合的实例,例如ArrayList,添加值,然后对其进行排序:

List<ComparableObject> sortedCollection = new ArrayList<ComparableObject>(map.values());
Collections.sort(sortedCollection);
Run Code Online (Sandbox Code Playgroud)

(B)

创建一个有序集合的实例TreeSet,然后添加值:

Set<ComparableObject> sortedCollection = new TreeSet<ComparableObject>(map.values());
Run Code Online (Sandbox Code Playgroud)

请注意,结果集合永远不会被修改,因此排序只需要进行一次.

java sorting collections

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

在子类的Hibernate中为每个表指定不同的序列

有没有办法为Hibernate中的每个表指定不同的序列,如果ID是在映射的超类上定义的?

我们的应用程序中的所有实体都扩展了一个名为的超类DataObject:

@MappedSuperclass
public abstract class DataObject implements Serializable {
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id")
    private int id;
}

@Entity
@Table(name = "entity_a")
public class EntityA extends DataObject { ... }

@Entity
@Table(name = "entity_b")
public class EntityB extends DataObject { ... }
Run Code Online (Sandbox Code Playgroud)

这会导致所有实体使用默认的共享序列hibernate_sequence.

我希望做的是使用一个单独的序列为每个实体,例如entity_a_sequenceentity_b_sequence上面的例子.如果在子类上指定了ID,那么我可以使用@SequenceGenerator注释为每个实体指定序列,但在这种情况下,ID在超类上.鉴于ID在超类中,是否有一种方法可以为每个实体使用单独的序列 - 如果是,那么如何?

(我们正在使用PostgreSQL 8.3,如果相关的话)

java postgresql hibernate sequence

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

如何使用Dojo实现实时搜索/搜索建议?

我想在使用Dojo框架的Web应用程序中实现"实时搜索"或"搜索建议"功能.这类似于Google和Bing搜索在您键入内容时显示匹配项的方式:当您在搜索框中输入时,下方会显示潜在匹配项列表.搜索将在服务器端执行,结果使用AJAX发送回浏览器.

有谁知道使用Dojo实现这个的好方法?

以下是一些潜在的选择:

  • 内置的小部件dijit.form.ComboBox
    它具有非常相似的功能,但我只看到它用于有限的数据集.示例总是使用小列表(例如美国的50个州)并预加载整个数据集以进行客户端过滤.但是,我认为我可以将它连接到dojox.data.JsonQueryRestStore进行服务器端搜索 - 任何人都可以确认这是否有效?

  • QueryBox http://marumushi.com/code/querybox/
    这个实现主要完成这项工作,但它有一些小错误,看起来不像是在维护.在使用它之前,我必须对代码做一些错误修正.

  • Medryx http://blog.medryx.org/2008/09/10/dijitsearch-part-2/
    这也看起来像它的工作,但它被描述为'alpha级'代码,代码的链接似乎被打破......

我可能会完成上述工作之一,但我想知道是否有更好的选择.

javascript ajax search dojo

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

在骨干中从一个视图向另一个视图发射事件

我有一个主视图,在主视图内部,我有另一个视图,当我单击一个按钮时,它会被创建.有没有办法在父视图上侦听从子视图触发的事件的自定义事件.我试图通过使用jQuery触发器的el属性来完成它,但这并不是很有效.

jquery backbone.js

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

有没有办法阻止Hibernate破坏@Where注释中的布尔文字?

我想@Where在Hibernate中使用注释来删除已被该对象上的布尔属性标记为"已删除"的对象.例如,以下内容应该防止H​​ibernate加载任何已删除的地址:

@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses; 
Run Code Online (Sandbox Code Playgroud)

但是当我使用类似的子句时,deleted=FALSEHibernate将通过在其前面加上表名来破坏布尔文字,这会导致查询失败.例如:

select ... from address address0_ where  ( address0_.deleted=address0_.FALSE)  and address0_.contact_id=?
Run Code Online (Sandbox Code Playgroud)

我所期待的是(address0_.deleted=FALSE)代替的东西(address0_.deleted=address0_.FALSE).

有没有办法指定@Where子句或配置Hibernate以正确输出布尔值?


PS.请注意,某些数据库可以将布尔值指定为字符串文字,如下所示:

@Where(clause="deleted='FALSE'")
Run Code Online (Sandbox Code Playgroud)

这将被转换为(address0_.deleted='FALSE')可以正常工作,例如,PostgreSQL.但是我在这个项目中使用HSQLDB,而HSQLDB似乎不支持布尔字符串文字.在HSQL上,使用时会出现以下异常deleted='FALSE':

org.hsqldb.HsqlException: data exception: invalid character value for cast

java hibernate boolean hsqldb

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

Hibernate:对MySQL使用反引号,但对HSQL使用反引号

我工作的项目(使用Java,Spring,Hibernate)最近从Oracle改为MySQL.在某些情况下,代码中的某些属性是MySQL中的保留字,例如"release".

有一些解决方案,1)重命名代码中的属性和后续的getter/setter方法,还更新调用这些方法的代码2)使用@Column(name ="`release`")在代码中注释属性.这告诉hibernate在与数据库交谈时引用该名称.

我宁愿远离第一种方法来减少破坏更多东西的机会.第二种方法是"ok",除了它特定于MySQL.在我们的开发中.设置我们使用HSQL,它不喜欢这些列名称的反引号.

我查看了org.hibernate.mapping.Column类,我发现它有"getQuotedName"方法,如果我可以继承Column并告诉Hibernate使用我自己的Column类,我可能会覆盖这些方法.

基于以下首选方法解决此问题的最佳方法是:a)不必重构代码库(b/c更改属性名称,getter/setter方法等)和b)希望应用程序仍然可以在HSQL中工作MySQL的.

在属性文件中具有可以切换以打开/关闭某些列命名修复的属性是合理的.这提醒我,我尝试使用自定义命名策略并覆盖"columnName"方法来围绕反引号中的列名称...这不起作用,即使在MySQL上也是如此.

java mysql spring hibernate hsqldb

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

如何使用Apache POI在Word .docx文件中正确生成RSID属性?

我一直在使用Apache POI来操作Microsoft Word .docx文件 - 即打开最初在Microsoft Word中创建的文档,对其进行修改,将其保存到新文档中.

我注意到Apache POI创建的新段落缺少修订保存ID,通常称为RSIDrsidR.Word使用它来标识在一个会话中对文档所做的更改,例如在保存之间.它是可选的 - 用户可以根据需要在Microsoft Word中关闭它 - 但实际上几乎每个人都有它,所以几乎每个文档都充满了RSID.阅读有关RSID的这个优秀解释,了解更多相关信息.

在Microsoft Word文档中,word/document.xml包含以下段落:

<w:p w:rsidR="007809A1" w:rsidRDefault="007809A1" w:rsidP="00191825">
  <w:r>
    <w:t>Paragraph of text here.</w:t>
  </w:r>
</w:p>
Run Code Online (Sandbox Code Playgroud)

但是,POI创建的相同段落将如下所示word/document.xml:

<w:p>
  <w:r>
    <w:t>Paragraph of text here.</w:t>
  </w:r>
</w:p>
Run Code Online (Sandbox Code Playgroud)

我已经发现我可以强制POI使用以下代码为每个段落添加一个RSID:

    byte[] rsid = ???;
    XWPFParagraph paragraph = document.createParagraph();
    paragraph.getCTP().setRsidR(rsid);
    paragraph.getCTP().setRsidRDefault(rsid);
Run Code Online (Sandbox Code Playgroud)

但是我不知道应该如何生成RSID.

POI是否有办法或生成和/或跟踪RSID?如果没有,有什么方法可以确保我生成的RSID与文档中已有的RSID不冲突?

java docx apache-poi

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