我正在使用SEAM 2/Hibernate和PostgreSQL 9数据库.我有下表
Active Band
===========
active_band_id serial
active_band_user text
active_band_date timestamp
active_band_process integer
Run Code Online (Sandbox Code Playgroud)
我想添加一个约束,确保每个新条目都具有active_band_user和active_band_date的唯一组合.
每秒可能有很多尝试插入,所以我需要尽可能高效,是否有可以在实体映射中使用的SEAM/hibernate注释?
提前致谢
我正在使用SEAM和JPA(实现为Seam Managed Persistance Context),在我的支持bean中,我将一组实体(ArrayList)加载到支持bean中.
如果不同的用户修改了不同会话中的某个实体,我希望将这些更改传播到我的会话中的集合,我有一个方法refreshList(),并尝试了以下...
@Override
public List<ItemStatus> refreshList(){
itemList = itemStatusDAO.getCurrentStatus();
}
Run Code Online (Sandbox Code Playgroud)
使用以下查询
@SuppressWarnings("unchecked")
@Override
public List<ItemStatus> getCurrentStatus(){
String s = "SELECT DISTINCT iS FROM ItemStatus iS ";
s+="ORDER BY iS.dateCreated ASC";
Query q = this.getEntityManager().createQuery(s);
return q.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
重新执行查询,这只返回我已经拥有的相同数据(我假设它使用的是第一级缓存而不是命中数据库)
@Override
public List<ItemStatus> refreshList(){
itemStatusDAO.refresh(itemList)
}
Run Code Online (Sandbox Code Playgroud)
调用entityManager.refresh(),这应该从数据库刷新但是javax.ejb.EJBTransactionRolledbackException: Entity not managed当我使用它时我得到一个异常,通常我会entityManager.findById(entity.getId)在调用.refresh()之前使用它来确保它连接到PC但是因为我刷新了一组实体我不能这样做.
这似乎是一个非常简单的问题,我不能相信没有办法强制JPA/hibernate绕过缓存并命中数据库?!
更新测试案例:
我使用两个不同的浏览器(1和2)加载相同的网页,我在1中进行修改,更新其中一个ItemStatus实体的布尔属性,视图刷新为1以显示更新的属性,我检查数据库通过PGAdmin并且行已更新.然后,我在浏览器2中按刷新,该属性尚未更新
我尝试在调用.refresh之前使用以下方法合并所有实体,但实体仍未从数据库更新.
@Override
public void mergeCollectionIntoEntityManager(List<T> entityCollection){
for(T entity: entityCollection){
if(!this.getEntityManager().contains(entity)){
this.getEntityManager().refresh(this.getEntityManager().merge(entity));
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个PostgreSQL(9.0)数据库,其列card_id目前是整数类型
我需要将其更改为键入文本
实现这一目标的最佳方法是什么?
我能找到的唯一解决方案是创建一个临时列,删除原始然后重命名,我认为它们可能是一个更好的方法?
在EC2实例中使用AWS CLI时,如何指定我要使用实例配置文件凭据?文档说:
Instance profile credentials – these credentials can be used on EC2
instances with an assigned instance role, and are delivered through
the Amazon EC2 metadata service.
Run Code Online (Sandbox Code Playgroud)
这是自动的还是我需要调用元数据服务并将返回的凭据保存到~/.aws/credentials文件中...然后拨打电话?
这里有点奇怪的,我没有看到任何其他的报告,我们最近报告了IE11用户的一些UI错误,经过一些测试我意识到在执行reRender(我使用的是A4J)之后,IE11正在放置HTML错误的地方,例如.
<s:div id="parent" rendered="#{someCondition}">
<div id="brother"></div>
<div id="sister"></div>
</s:div>
Run Code Online (Sandbox Code Playgroud)
在重新渲染之后看起来像这样
<s:div id="parent" rendered="#{someCondition}">
<div id="brother">
<div id="sister"></div>
</div>
</s:div>
Run Code Online (Sandbox Code Playgroud)
这显然是对布局造成严重破坏
我混合JSF/HTML组件相当多,但不认为这应该导致问题?
可能导致这种情况的任何想法?
JSF 1.2 | RichFaces 3.3 | Facelets的
我试图允许管理组中的所有用户在jar没有密码的情况下以SUDO 运行文件,我已经编辑了sudoers文件(使用visudo)并尝试了一些命令,但它仍然提示我每次输入密码
内容/etc/sudoers:
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL) ALL
# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need …Run Code Online (Sandbox Code Playgroud) 我有一个适当的新手SEAM问题,我想将用户重定向到支持bean的不同页面
我知道在大多数情况下你应该使用pages.xml,但是根据bean逻辑可能会有许多不同的页面,所以看起来它应该比bean更容易.
我不能看到任何人这样做的例子,所以我猜有一个原因,也许这样的东西可以工作?? ...
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
((HttpServletRequest) ec.redirect("http://example.com/");
Run Code Online (Sandbox Code Playgroud) 我在表上允许我执行全文搜索的tsvector列'user_tsv'有以下tsvector更新触发器,
CREATE TRIGGER tsvector_user_update BEFORE INSERT OR UPDATE ON users
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(user_tsv, 'pg_catalog.english', firstname, surname, email);
CREATE INDEX user_index_tsv ON users USING gin(user_tsv);
Run Code Online (Sandbox Code Playgroud)
我已经在表中添加了另一个列,我希望包含在此触发器中,是否有任何方法可以更新触发器(以及tsvector列)或者是否需要删除列/触发器并重新添加它们?
PostgreSQL 9.0
提前致谢
大卫
我最近遇到了Web应用程序的一些问题,我有一个MDB(HornetQ)设置,它消耗来自许多远程节点(独立Java应用程序)的健康消息,因为我们已经稳步增加了我们报告的节点数量开始遇到Web应用程序丢失数据库连接,检查日志文件以及收到消息时报告以下错误的问题:
2014-04-23 06:38:37,094 ERROR [org.hibernate.util.JDBCExceptionReporter] (Thread-100 (group:HornetQ-client-global-threads-32102134)) Unable to get managed connection for webAppDatasource; - nested throwable: (javax.resource.ResourceException: Unable to get managed connection for webAppDatasource)
Run Code Online (Sandbox Code Playgroud)
一旦发生这种情况,我们整个Web应用程序都无法使用,因为数据库不再允许连接,我必须登录JBoss管理控制台,暂停队列,清除积压,然后重启PostgreSQL
我最初认为应用程序占用太多连接而且我添加了3CP0来汇集它们但是这似乎没有帮助(使用默认设置),我还将我们的数据库移动到单独的服务器上以帮助解决任何性能瓶颈并将"autoReconnect"和"check-valid-connection-sql"属性添加到数据源配置中,如下所示:
<datasources>
<local-tx-datasource>
<jndi-name>webAppDatasource</jndi-name>
<connection-url>jdbc:postgresql://10.123.123.23:5432/MainDb</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<autoReconnect>true</autoReconnect>
<check-valid-connection-sql>select count(*) from admin_users</check-valid-connection-sql>
<failOverReadOnly>false</failOverReadOnly>
<maxReconnects>50</maxReconnects>
<initialTimeout>15</initialTimeout>
<user-name>jboss</user-name>
<password>*****</password>
</local-tx-datasource>
</datasources>
Run Code Online (Sandbox Code Playgroud)
平均而言,应用程序似乎使用了大约4/5的连接,这似乎并不过分.
MDB本身非常简单并且解析消息,对数据库执行一些检查并将内容保存到几个不同的表中,大约60个节点每120秒生成1个消息,因此应用程序/数据库可能会在某些情况下不堪重负点
所以我的问题是,任何人都可以建议为什么数据源会失去他们的连接,是否有任何我可以采取的步骤来防止这种情况发生?
谢谢
(我使用的是postgresql-9.0-802.jdbc4驱动程序,PostgreSQL 9.0,Hibernate 3.6,JBoss AS 6)
更新:下面的Stacktrace,
2014-04-23 06:48:39,886 ERROR [org.quartz.core.JobRunShell] (JBossQuartzScheduler_Worker-7) Job default.job.10.1398215092090 threw an unhandled Exception: : javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.GenericJDBCException: Cannot open connection
at $Proxy328.findById(Unknown Source)
at sun.reflect.GeneratedMethodAccessor603.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at …Run Code Online (Sandbox Code Playgroud) 我有以下查询:
StringBuilder sb = new StringBuilder("select e from Event e");
sb.append(" where e.user = :user and e.activated = true and e.startDate <= :date and uc.endDate >= :date");
Query query = this.getEntityManager().createQuery(sb.toString());
query.setParameter("user", user);
query.setParameter("date", date);
Run Code Online (Sandbox Code Playgroud)
其中date是标准的java日期对象和startDate,endDate是没有时间的Postgresql日期(例如,在数据库中它们看起来像'2014-04-03')
但我发现当提供的日期参数与startDate列相同时,则找不到匹配项.我以为'='中的'='会处理这个问题?
我认为这是发生的,因为一个是完整的时间戳,一个只是一个约会?我已经尝试过其他类似问题的建议,包括......
- 使用SimpleDateFormat将日期转换为yyyy-MM-dd模式,然后使用DATE()在HQL中强制转换
- 在设置为参数之前,使用日历删除时间组件
- 使用日(e.startDate)<=日(日期)和月(e.startDate)=月(日期)等...
但没有一个有效.所以我的问题是,为什么这个日期比较不起作用和/或如何正确地将参数转换为日期?
PostgreSQL 9.0 | JPA | Hibernate 3.6
谢谢!