QueryDSL中是否有一种方法可以直接插入JPA实体而不使用JPA提供程序?
我的用例问题如下.我正在使用Hibernate与两个实体之间的连接表映射.
例如:
public class Contract implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Version
@Column(name = "version")
private Integer version;
private String number;
private String volume;
@ManyToMany
@JoinTable(joinColumns = @JoinColumn(name = "contract_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "attachment_id", referencedColumnName = "id"))
private List<Attachment> attachments;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我尝试同时在2个单独的线程中添加附件,我将获得乐观的锁定异常(如预期的那样).所以相反,我想尝试通过SQL插入命令直接添加附件.
无论如何Attachment通过QueryDSL作为对象插入实体?我找不到任何涵盖此用例的参考文档.只有更新查询,需要设置各个字段.
伪代码:
JPAQuery.insert(QAttachment.attachment).into(QContract.attachment).where(QContract.contract.id.eq(<contractId>));
Run Code Online (Sandbox Code Playgroud)
这样的事情可行吗?
由于我的构建系统的设计方式(RTC 构建引擎),我想通过属性文件为 maven 提供属性值,而不是为每个属性指定 -Dkey=value。
我发现了几个关于 SO 的问题(How to set build properties from a file in Maven POM? and How to read an external properties file in Maven)与这个问题完全相关,但它们相对较旧,并且都需要自定义插件工作(处于 alpha 状态)。
我意识到像这样将参数传递给 Maven 可能不是最好的解决方案,但另一个选项是通过 -D 设置在命令行上指定所有内容,这也不理想。
此外,鉴于此属性文件仅由构建引擎(而不是个人开发人员)真正使用,我并不真正相信它属于 pom.xml 文件。但是我找不到任何其他机制可以让我指定要使用的插件 - settings.xml 不允许指定插件。
在这种情况下,我唯一的选择是使用插件并在项目 pom 中指定它吗?
我正在考虑实施基于信标的应用程序,以根据信标放置进行一些位置跟踪.根据我的阅读和理解,信标监控在电池寿命方面相当无害,但绝对会对电池寿命产生更大的影响.
测量时是否有任何规格或技巧/技术可以最大限度地减少电池消耗?测距时的电池寿命与GPS位置跟踪相比如何?
这篇2013 年关于 SO 的帖子询问了如何使用 Hamcrest 匹配器来验证 Mockito 中的列表/集合调用。公认的解决方案是将 Matcher 转换为 (Collection)。
我正在尝试做类似的事情,但遇到了类转换错误。我不确定我是否误用了 Hamcrest 匹配器,或者 Mockito 是否根本不支持这种用法。就我而言,我试图使用匹配器列表作为我的参数:
static class Collaborator
{
void doSomething(Iterable<String> values) {}
}
@Test
public void usingMockito()
{
Collaborator mock = Mockito.mock(Collaborator.class);
mock.doSomething(Arrays.asList("a", "b"));
// legal cast
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains("a", "b")));
// legal cast
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Matchers.equalTo("a"), Matchers.equalTo("b"))));
// illegal cast!!! Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Arrays.asList(Matchers.equalTo("a"), Matchers.equalTo("b")))));
}
Run Code Online (Sandbox Code Playgroud)
但我得到了演员错误:
Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
Run Code Online (Sandbox Code Playgroud)
我在做一些不受支持的事情吗?
这是之前SO帖子的后续内容.
我正在使用Windows/cygwin,我需要python来理解自定义CA证书,因为网络基础结构使用自己的证书重新签名所有SSL请求.
如果我尝试运行pip search SimpleHTTPServer,我收到以下错误消息:
...
File "c:\users\erbe\appdata\local\programs\python\python35-32\lib\ssl.py", line 633, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
Run Code Online (Sandbox Code Playgroud)
我尝试通过执行以下操作将证书添加到我的可信证书列表中:
update-ca-trust extract我已经验证这是有效的,因为我现在可以指向生成的PEM文件并成功运行pip pip --cert /usr/local/ssl/cert.pem search SimpleHTTPServer:
$ pip --cert tls-ca-bundle.pem search SimpleHTTPServer
ComplexHTTPServer (0.1) - A Multithreaded Python SimpleHTTPServer
SimpleTornadoServer (1.0) - better SimpleHTTPServer using tornado
rangehttpserver (1.2.0) - SimpleHTTPServer with support for Range requests
Run Code Online (Sandbox Code Playgroud)
但是,我希望这一点无需每次都手动指定证书.我希望更新python使用的证书链:
$ python -c "import ssl; print(ssl.get_default_verify_paths())"
DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs')
Run Code Online (Sandbox Code Playgroud)
我已经通过一系列符号链接验证了/usr/local/ssl/cert.pem指向同一个文件.但是,如果我执行pip …
我试图了解Web应用程序中反向通道注销的流程,但是我发现文档令人困惑。我有一个运行JBoss EAP的JEE应用程序,带有Java Servlet过滤适配器(出于某些技术原因,我不能使用EAP适配器)。该用于注销,文件说:
您可以通过多种方式注销Web应用程序。对于Java EE Servlet容器,可以调用HttpServletRequest.logout()。对于其他浏览器应用程序,您可以将浏览器重定向到 http:// auth-server / auth / realms / {realm-name} / protocol / openid-connect / logout?redirect_uri = encodedRedirectUri,如果您有SSO,它将注销您浏览器会话。
管理员URL配置的文档说:
例如,反向通道注销的工作方式是:1.用户从一个应用程序发送注销请求2.该应用程序将注销请求发送到Keycloak 3. Keycloak服务器使用户会话无效。4.然后,Keycloak服务器使用一个与会话5相关联的管理url。当应用程序收到注销请求时,它将使相应的HTTP会话无效。
因此,据我了解,
http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri应该以某种方式检测到clientId(从重定向URI?)并将请求发送到适当的反向通道这两种选择似乎都不适合我。无论哪种情况,我都不会从Keycloak回调到adminUrl。此外,在调用Request.logout()之后,我在Keycloak管理员中仍然看到相同数量的活动会话。根据这篇SO帖子,它似乎可以工作,但是我不确定是否缺少配置或某种形式的东西。
我尝试使用access_token将GET发送到注销端点,但这也没有任何区别。
我对本文档有什么误解?我应该如何编码注销?
OIDC 中有多个身份验证流程;隐式和身份验证代码流是 SPA 可访问的两个主要流。ietf 邮件列表中最近的电子邮件表明,由于访问令牌出现在浏览器历史记录和/或日志文件中的安全问题(如果任何 SSL 终止/检查到位/等),应该优先考虑 Auth 代码流而不是隐式流)。
是否有任何白皮书或 RFC 支持一种流程优于另一种流程?今天是否有行业标准/公认的方法?
这已被交叉发布到SoftwareEngineering,因为它是一个有争议的话题。我不是在寻找意见;而是为了支持更好的安全性/实施的主张的官方帮助/白皮书/参考材料。我一直无法找到它们,因此不确定使用哪种方法。
authentication oauth-2.0 single-page-application openid-connect angular
我看到 Hazelcast 3.12 引入了CPSubsystem()具有 3-7 个节点的系统。我明白其中的道理。但是,如果我试图设计一个可以在 1-n 个节点之间的任何地方运行的解决方案,我是否需要使用不同的逻辑来验证 CPSubsystem 是否已启用?我什至如何检查?
我会想/希望只是打电话
hazelcastInstance.getCPSubsystem().getLock()
Run Code Online (Sandbox Code Playgroud)
无论节点数量如何,都可以工作,但如果节点少于 3 个,则会引发异常。而且我找不到任何允许我检查是否CPSubsystem启用的方法。
我当前的实现使用已弃用的方法getLock()来获取分布式锁:
LOG.debug("Creating a distributed lock on username for a maximum of 5 minutes {}", username);
ILock usernameLock = hazelcastInstance.getLock(this.getClass().getName() + ":" + username);
try {
if (usernameLock.tryLock (5, TimeUnit.MINUTES)) {
clearUserData(cacheEntryEvent);
}
} catch (InterruptedException e) {
LOG.warn("Exception locking on : {} ", username, e);
LOG.warn("Invoking clearUserData without synchronization : {}", username);
clearUserData(cacheEntryEvent);
} finally {
usernameLock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
如何在不知道这一点的情况下获得 …
我正在尝试构建一个单jar Java实用程序.在之前的SO帖子中,有人建议使用onejar-maven-plugin插件.我试过了,但我遇到的问题是插件(1.4.4)创建了一个带有one-jar.jar扩展名的新工件.因此,我最终在我的目标文件夹中有2个jar,当我尝试安装和/或部署时,它会部署原始jar(而不是one-jar).
我已经从目标文件夹运行了一个jar.jar工件,它完全按预期工作,所以我很满意.但是,如果我无法使用标准mvn deploy命令语法正确部署它,则插件实际上并未按预期或按要求执行.
有没有办法正确构建pom配置以避免此问题?
我目前的pom写道:
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<mainClass>com.nbfg.cws.cs.lendingsimulationservice.Client</mainClass>
<onejarVersion>0.97</onejarVersion>
<attachToBuild>true</attachToBuild>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
运行时Maven输出mvn deploy:
测试运行:0,失败:0,错误:0,跳过:0
[INFO]
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ lss-client ---
[INFO]
[INFO] --- onejar-maven-plugin:1.4.4:one-jar (default) @ lss-client ---
[INFO] Using One-Jar to create a single-file distribution
[INFO] Implementation Version: 0.0.1-SNAPSHOT
[INFO] Using One-Jar version: 0.97
[INFO] More info on One-Jar: http://one-jar.sourceforge.net/
[INFO] License for One-Jar: http://one-jar.sourceforge.net/one-jar-license.txt
[INFO] One-Jar …Run Code Online (Sandbox Code Playgroud) 来自 mysql 背景的我能够在连接 url 中设置要用于所有 sql 查询的默认架构名称。我现在有一个需要访问的 Oracle 数据库。我知道我无法在 URL 中指定要使用的架构,因为用户是正在使用的架构名称。
我意识到我可以使用一行 SQL 代码:
ALTER SESSION SET CURRENT_SCHEMA=default_schema
Run Code Online (Sandbox Code Playgroud)
该项目使用mybatis 2.3.5作为我的 SQL 框架,但我对 mybatis 完全陌生。有没有简单的方法来配置mybatis来完成这个任务?我的应用程序是 Spring 3 应用程序,因此我使用Spring DataSourceTransactionManager来管理我的事务。我认为管理者必须了解这一要求,以确保每当创建新连接时都会发送命令。
我尝试过在线搜索,但我发现的大多数示例都将模式名称包含在 SqlMap 的 sql 查询中,我发现这是不好的做法。
在理想情况下,模式名称将是 URL 的一部分,这样我就可以针对不同环境(例如:开发、测试、生产等)更改模式名称,而无需接触代码(即:仅在 JNDI 上配置) /应用程序服务器级别)。如果我可以使用 Spring 配置值来设置它,并且我仍然可以使用 JNDI 查找或系统环境属性来检索该值,我会很高兴。
有人能指出我正确的方向吗?
谢谢,
埃里克
java ×4
maven ×2
angular ×1
battery ×1
concurrency ×1
cygwin ×1
executable ×1
generics ×1
gps ×1
hamcrest ×1
hazelcast ×1
hibernate ×1
https ×1
ibeacon ×1
ios ×1
jar ×1
java-ee ×1
jmockit ×1
jpa ×1
keycloak ×1
mockito ×1
mybatis ×1
oauth-2.0 ×1
oracle ×1
properties ×1
python ×1
querydsl ×1
schema ×1
spring ×1
ssl ×1
windows ×1