我有多种形式,我有必填字段和可选字段.
要提交这样的表单,我需要对要执行的required属性进行验证,这样可以正常工作.要取消这样的形式我使用属性immediate="true"上p:commandbutton,这使得在其作用发生应用请求值 -PHASE如下处理:点击一个特定的按钮时如何跳过验证?
但是,对于大型表单,我想为用户提供一个Save-Button,以便他可以稍后继续.
为了保存当前状态,我还想忽略required-attribute的验证.但是,使用immediate="true"不起作用,因为那时我的save方法简单保存,因为JSF生命周期永远不会命中"UpdateModelValues"-Phase.(根据http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html)
那么,如何绕过所需的检查但不跳过生命周期的一半?
我正在创建一个包含多个表的复杂查询,需要列出结果.通常,我正在使用EntityManager并将结果映射到JPA-Representation:
UserEntity user = em.find(UserEntity.class, "5");
Run Code Online (Sandbox Code Playgroud)
然后我可以在用户UserEntity类定义它时访问所有值.但是,如何访问本机多表查询返回的字段值?我得到的是一个对象列表.到目前为止这很好,但对象是什么"是"?阵列?地图?采集?...
//simpleExample
Query query = em.createNativeQuery("SELECT u.name,s.something FROM user u, someTable s WHERE s.user_id = u.id");
List list = query.getResultList();
//do sth. with the list, for example access "something" for every result row.
Run Code Online (Sandbox Code Playgroud)
我想答案很简单,但是大多数示例只显示直接转换为targetClass时的用法.
PS:在示例中,我当然可以使用类映射.但在我的情况下someTable不是由JPA管理,因此我没有实体,也没有它的类表示,因为我加入了20个表,我不想创建所有的类只是为了访问这些值.
我目前正在清理我的项目和相关的错误/警告.每次我将我的Maven项目部署到JBoss AS 7.1.1.Final我都会收到很多警告.
我发现很多帖子/评论只是忽略或隐藏这些警告.
好吧,警告只是警告,但是应该可以解决警告的原因,而不是隐藏或忽略那些警告(因为我认为:现在什么是警告,在某些其他方面可能会成为错误)
09:51:55,145 INFO [org.jboss.as.server.deployment] (MSC service thread 1-8) JBAS015876: Starting deployment of "oce2.war"
09:51:56,241 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'implementingClassName=org.jboss.shrinkwrap.impl.base.ConfigurableArchiveImpl' for service type 'org.jboss.shrinkwrap.spi.Configurable'
09:51:56,242 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'implementingClassName=org.jboss.shrinkwrap.impl.base.GenericArchiveImpl' for service type 'org.jboss.shrinkwrap.api.GenericArchive'
09:51:56,244 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'extension=.jar' for service type 'org.jboss.shrinkwrap.api.GenericArchive'
09:51:56,245 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid …Run Code Online (Sandbox Code Playgroud) 我有一个php应用程序(按要求)扫描一些文件的存在.(在网络共享上)
我正在使用glob这个,因为通常我只知道文件名的开头.
我注意到,这glob不会返回当前由任何客户端打开的文件,因此我的应用程序认为file_xy不存在,如果有人打开它.
有没有办法让glob回复打开(:=锁定?)文件?
奇怪的是,这没有提到的地方.但是我可以确认glob不返回当前由客户端打开的文件...(一旦客户端关闭访问应用程序,glob将像往常一样返回文件)
ps.:glob("\\server\share\*")只要打开文件就不会返回文件.(网络共享允许最大并发用户数)
$dir = opendir ("\\server\share");
while ($file = readdir($dir)){
echo $file."<br />";
}
Run Code Online (Sandbox Code Playgroud)
无论是否由其他客户打开,都可以完美地显示相关文件. - 所以我几乎可以排除任何访问限制/许可的东西......
我想通了的原因,即使我不知道原因,现在:
glob()当文件位于使用Windows Server 2012 R2内置重复数据删除功能的驱动器上时,将显示未找到打开文件的问题.
如果我将文件移动到非重复数据删除共享glob(),即使由多个客户端打开,也可以读取它.
由于我有一个可行的替代方案,这个问题应该主要关注为什么 glob不起作用的问题- 或者让我们说这里的工作不同.在如何glob以及readdir访问底层文件系统以确定内容方面必须有所不同.
还有另一个证明,这与数据重复数据删除有关:我将该功能配置为"仅"重复删除超过3天的文件.
我设置了一个cronjob,"打开并整理"共享中的某个文件.一旦它大约3天(Windows决定何时进行重复数据删除),当它由另一个客户端打开时,glob无法列出该文件.
因此,glob能够找到打开的文件,这些文件在前3天内被复制到共享中 - 然后在进行重复数据删除后开始错过它.
glob 失败,导致这篇文章:-)
使用上面提到的scandir函数显示了相同的行为:
我想再次强调, …
我目前正在努力使用复合主键类的方案正确的映射注释.首先,我想用文字来实现:
我有2个类:group和FieldAccessRule.组可以有多个FieldAccessRules,而FieldAccessRule只有一个组分配.到目前为止,修改这个问题不是一个问题(简化):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
Run Code Online (Sandbox Code Playgroud)
并为FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我决定使用复合PK作为FieldAccessRule,因为规则对于ONE Group和ONE Field应该是唯一的.它看起来像这样:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
Run Code Online (Sandbox Code Playgroud)
和ofc.FieldAccessRule需要更改为
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
Run Code Online (Sandbox Code Playgroud)
如何为Group的FieldAccessRuleSet创建正确的映射?这样做,我得到:
在属性"fieldAccessRules"中,"映射者"值"组"无法解析为目标实体上的>属性.
什么是创建从Group到PrimaryKey的PART的映射的正确方法?
编辑:我知道发现,使用
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
Run Code Online (Sandbox Code Playgroud)
完全按预期工作.它编译得很好,它可以很好地创建数据库,并且在加载具有预定义角色的组之后,它们可以按预期使用.
但是,Eclipse仍然说
在属性"fieldAccessRules"中,"映射的"值"fieldAccessRulePK.group"无法解析为目标实体上的属性.
我不确定,如果忽略错误并且"假设"每一件事情都很好......(我发现一个帖子,据说已经说过,Hibernate支持模式attr1.attr2的映射但不支持JPA确认. )
我们有一个服务@Statefull.大多数数据操作都是原子的,但在一组函数中我们希望native queries在一个事务中运行多个.
我们注入了EntityManager一个事务范围的持久化上下文.在创建正常实体的"束"时,使用em.persist()一切工作正常.
但是当使用本机查询(某些表没有任何表示@Entity)时,Hibernate不会在同一个事务中运行它们,但基本上每个查询使用一个事务.
因此,我已经尝试使用手册START TRANSACTION;和COMMIT;条目 - 但这似乎干扰了事务,hibernate在混合本机查询和持久性调用时用于持久化实体.
@Statefull
class Service{
@PersistenceContext(unitName = "service")
private EntityManager em;
public void doSth(){
this.em.createNativeQuery("blabla").executeUpdate();
this.em.persist(SomeEntity);
this.em.createNativeQuery("blablubb").executeUpdate();
}
}
Run Code Online (Sandbox Code Playgroud)
此方法中的所有内容都应在一个事务中发生.这可能与Hibernate一起使用吗?在调试它时,可以清楚地看到每个语句都发生在任何事务的"独立"状态.(即每次声明后立即将更改刷新到数据库.)
我已经使用最小设置测试了波纹管给出的示例,以便消除问题上的任何其他因素(字符串仅用于在每次查询后检查数据库的断点):
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
public class TestService {
@PersistenceContext(name = "test")
private EntityManager em;
public void transactionalCreation(){
em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('a','b','c')").executeUpdate();
String x = "test";
em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('a','c','b')").executeUpdate();
String y = "test2";
em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('c','b','a')").executeUpdate();
}
}
Run Code Online (Sandbox Code Playgroud)
Hibernate配置如下: …
我正在尝试使用Hibernate作为提供程序为我的Maven项目设置JPA.
项目结构
??? META-INF
? ??? persistence.xml
??? src
| ??? main
| | ??? java
| | ??? model
| | | ??? Instance.java
| | ??? App.java
| ??? test
| ??? java
| ??? model
| ??? AppTest.java
??? pom.xml
Run Code Online (Sandbox Code Playgroud)
persistence.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>it.vitrociset.model.Instance</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/aquasystem"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="username"/>
<property name="hibernate.connection.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
Instance.java的内容
package model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public …Run Code Online (Sandbox Code Playgroud) 鉴于以下有效代码:
Boolean a = false;
if (a)
System.out.println("A");
else
System.out.println("!A");
Run Code Online (Sandbox Code Playgroud)
现在,根据文档if包括它的条件和内部statement也是一个statement(https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html - 至少它被称为statement全文档)
例如:
if (b){
System.out.println("B");
}
Run Code Online (Sandbox Code Playgroud)
是一个statement.
但是,当我们要用另一个语句替换现有语句时,它不应该触及整体逻辑,对吧?假设我们更换(表达) - if-statement与else上面:
Boolean a = false;
Boolean b = false:
if (a)
if (b){
System.out.println("A and B");
}
else
System.out.println("!A");
Run Code Online (Sandbox Code Playgroud)
Java编译器将如下解释代码示例(完整的大括号用于解释):
Boolean a = false;
Boolean b = false:
if (a){
if (b){
System.out.println("A and B");
} else {
System.out.println("!A");
}
}
Run Code Online (Sandbox Code Playgroud)
这不是最初的逻辑.
那么为什么要交换一个声明而另一个声明改变逻辑呢? …
我正在使用带有各种Tabs的Activitiy.从应用程序的不同部分创建通知,以告知用户某些内容已更改.当用户点击通知时,我现在设法调用活动.但是,如何在运行时或通过单击通知确定活动是以"正常"方式创建的?
(根据单击的通知,我想转发到另一个选项卡而不是显示主选项卡.)
Intent intent = new Intent(ctx, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, 0);
// TODO: Replace with .Build() for api >= 16
Notification noti = new Notification.Builder(ctx)
.setContentTitle("Notification"
.setContentText(this.getName())
.setSmallIcon(R.drawable.icon)
.setContentIntent(pendingIntent)
.setDefaults(
Notification.DEFAULT_SOUND
| Notification.DEFAULT_LIGHTS)
.setAutoCancel(true)
.getNotification();
NotificationManager notificationManager = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
// Hide the notification after its selected
notificationManager.notify(this.getId(), noti);
Run Code Online (Sandbox Code Playgroud)
这成功调用了我的MainActivity.但是,当Activity被触发时,是否有一些方法被调用pendingIntent?
想在主要活动中定义这样的东西:
onTriggeredByNotification(Notification noti){
//determinte tab, depending on Notification.
}
Run Code Online (Sandbox Code Playgroud) 我们将日期存储为unix时间戳.为了允许用户搜索特定日期 - 基于他的时区设置,我们用于在查询中转换该时间戳,以确保搜索"2012-05-03"将找不到先前/下一个的结果一天取决于用户设置的时区.
即如果日期存储为2012-05-03 23:00 (UTC)具有适当时区偏移搜索的用户2012-05-04应找到此条目.
目前这样做是这样的:
CONVERT_TZ(FROM_UNIXTIME(`javaTimeStampColumn`/1000),'+00:00','+00:00')
Run Code Online (Sandbox Code Playgroud)
在哪里 根据用户时区设置偏移量.
我们目前面临的问题是:Java成功地将一年后的日期存储2038为unix-timestamp.from_unixtime然而,MySQL方法不支持任何大于2147483647由于它的整数类型限制的值的转换:
SELECT FROM_UNIXTIME(2147483647); //2038-01-19 04:14:07
SELECT FROM_UNIXTIME(2147483648); //null
Run Code Online (Sandbox Code Playgroud)
MySQL服务器本身是64位,但是ofc.FROM_UNIXTIME需要接受一个长期的论点.
我现在找不到合适的替代品,有什么提示吗?
我们可以.将时间戳加载为Long并在应用程序中处理它 - 但对于延迟编码,我们还需要能够在查询期间正确转换它.
java ×4
jpa ×4
hibernate ×3
maven ×2
mysql ×2
android ×1
deployment ×1
embeddable ×1
glob ×1
if-statement ×1
jboss ×1
jsf ×1
lifecycle ×1
one-to-many ×1
php ×1
timestamp ×1
transactions ×1
validation ×1
war ×1