小编sin*_*ge3的帖子

运行find抛出一个Detached实体传递给持久异常

在尝试通过REST API更新资源时,我遇到了Spring和Hibernate的错误.

我用最少的额外属性简化了案例.

基本模型概述

我正在尝试更新名为的资源Rule.
Rule有一个ThingGroup是一组对象的表示. Rule还有一组Event代表规则的激活范围.在执行应用程序期间,运行必须检查此事件组上的某些参数以触发警报.

Hibernate抛出的错误

我的问题是,在update下面的规则服务中使用该方法时,它会因此错误而失败.

 org.hibernate.PersistentObjectException: detached entity passed to persist: com.smartobjectsecurity.common.domain.rule.Event
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:276)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:221)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeRepositoryPostProcessor.java:105)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy117.findOne(Unknown Source)
at com.smartobjectsecurity.common.service.thing.ThingGroupServiceImpl.find(ThingGroupServiceImpl.java:62)
at com.smartobjectsecurity.common.service.thing.ThingGroupServiceImpl.find(ThingGroupServiceImpl.java:1)
at com.smartobjectsecurity.common.service.GenericServiceImpl.find(GenericServiceImpl.java:1)
at com.smartobjectsecurity.common.service.GenericServiceImpl$$FastClassBySpringCGLIB$$daaa7267.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
at com.smartobjectsecurity.common.service.thing.ThingGroupServiceImpl$$EnhancerBySpringCGLIB$$aa452fd7.find(<generated>)
at …
Run Code Online (Sandbox Code Playgroud)

java orm spring hibernate exception

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

为什么我无法在 @Mapping 属性中引用 @Context 参数?

使用mapstruct,我需要的是一个具有多个源的映射方法,并且这几个源被传递给其他映射方法,这样我就可以为需要这些附加源的所有映射方法提供所有多个源。

目前有两个功能可以一起工作:

  • 只有 @Context 可以传递给其他映射方法,但不能用作源。
  • 辅助参数(非@Context)可以用作源,但不会传递给其他映射方法

因此,功能需求是要么允许辅助源参数传递给其他映射方法,要么使 @Context 参数能够被或@Mapping(target="something", source="ctx.somethingElse")引用@Mapping(target="ctx.something", source="somethingElse)

例子 :

// source classes : `Instant timestamp` is a field I obtain separately

Instant timestamp;

class WrapperSource
   List<NestedSource> nested;

class NestedSource
    String name;



// target classes : I want to map the nested and name field but also to insert the timestamp in both the WrapperTarget and every NestedTarget in the nested list

class WrapperTarget
   Instant timestamp;
   List<NestedTarget> nested;

class NestedTarget
    String name;
    Instant timestamp; …
Run Code Online (Sandbox Code Playgroud)

java mapstruct

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

calc()CSS属性如何在旧浏览器中降级

考虑到calc()CSS属性与大多数浏览器相当兼容(参见http://caniuse.com/calc),我仍然想知道它在旧浏览器中是如何降级的,特别是在Android浏览器上,因为只有最后一个版本似乎处理得好.我不太关心IE支持.

这是一个普遍的问题,但这里有一个小例子http://jsfiddle.net/7swVc/

我想知道这些属性会如何降级:

width:calc(100% - 50px);
height:calc(100% - 50px);
Run Code Online (Sandbox Code Playgroud)

html css css3

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

杰克逊@JsonIgnore基于春季安全角色的领域

在我的所有Spring REST Web应用程序中,我有很多域对象和DTO.

我需要根据发出请求的用户的spring安全角色过滤一些域对象或DTO字段.我希望Jackson根据尝试访问资源的用户的Spring GrantedAuthorities角色,过滤输出JSON以允许/禁止特定类字段序列化.

我不能为每个不同的视图组合创建新的DTO,因为它会很乱.

我找到了这个解决方案:
Spring 3.2:根据Spring Security角色过滤Jackson JSON输出
但是它不起作用,过滤器只在第一个用户登录时应用一次.然后所有其他用户获得相同的过滤,无论他们的角色是什么.

在这篇博客文章中我无法比Ray Holland更好地解释我的问题:
http://jackson-users.ning.com/forum/topics/jackson-custom-serialization
这是我试图解决的一些完全相同的问题天.

到目前为止,我找不到干净的方法.

serialization spring json jackson

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

Spring临时CSRF令牌到期时间有多长时间?

我启用了带有弹簧安全性的CSRF,它按预期运行。

我阅读了有关CSRF的Spring官方文档 http://docs.spring.io/spring-security/site/docs/3.2.7.RELEASE/reference/htmlsingle/#csrf

我还阅读了有关使用Spring和AngularJS的CSRF的教程 http://www.codesandnotes.be/2015/07/24/angularjs-web-apps-for-spring-based-rest-services-security-the-server-side -part-2-csrf /

Spring Security所做的是为此设置了一个临时会话。所以基本上它是这样的:

  1. 客户端要求带有OPTIONS请求的令牌。
  2. 服务器创建一个临时会话,存储令牌,然后将JSESSIONID和令牌发送回客户端。
  3. 客户端使用该JSESSIONID和CSRF令牌提交登录凭据。
  4. 服务器将为接收到的JSESSIONID匹配存储的CSRF,如果全部亮起,则将创建新的最终JSESSIONID和新的基于会话的CSRF令牌,以供客户端在登录后验证其请求。

据我了解,当您未登录时,可以通过在任何API端点(例如/ api / login)上发送OPTIONS请求来获取第一个CSRF令牌

然后,Spring将创建绑定到临时会话的CSRF令牌(临时CSRF和JSESSIONID cookie)

因此,如果我问CSRF令牌而不是等待几分钟然后最终尝试登录,则CSRF令牌可能已到期,我将不得不询问另一个令牌。

我找不到如何配置Spring会话的临时过期时间,也找不到确切的默认持续时间是多少。

是否有人对此有任何信息?

session spring csrf

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

从开放遥测 Java 代理检测中过滤掉特定的 http api 调用

我正在使用此处记录的开放遥测 Java 代理来检测 Java Spring Boot 应用程序并将跟踪导出到 Google Cloud Trace。

我的命令是:

java \
  -javaagent:/opentelemetry/opentelemetry-javaagent.jar \
  -Dotel.javaagent.extensions=/opentelemetry/exporter-auto-0.22.0-alpha.jar \
  -Dotel.traces.exporter=google_cloud_trace \
  -Dotel.metrics.exporter=none \
  -jar \
  /app.jar
Run Code Online (Sandbox Code Playgroud)

有用。

但是,由于我使用活性探针在 kubernetes 下部署应用程序,代理还会记录端点的跟踪/actuator/health

我想过滤掉这些呼叫,以便代理不会记录它们并将其发送给收集器。

代理配置文档似乎没有涵盖这个用例。

是否可以通过 http 调用过滤跟踪但尚未记录?这是计划中的功能吗?

java google-cloud-platform google-cloud-trace open-telemetry

5
推荐指数
0
解决办法
964
查看次数

CSS @keyframes在Chrome中不起作用

我正在尝试CSS3 @keyframes动画,但没有设法使其在Chrome中运行(目前我有Chrome 38)

代码非常简单:

的HTML

<div id="block">moving text</div>
Run Code Online (Sandbox Code Playgroud)


的CSS

@keyframes mymove
{
    0%   {top:0px;}
    25%  {top:200px;}
    50%  {top:100px;}
    75%  {top:200px;}
    100% {top:0px;}
}

#block {
    position:absolute;
    animation: mymove 2s infinite;
}
Run Code Online (Sandbox Code Playgroud)

这是带有相同代码的小提琴

对我来说,文本在Chrome 38中不会移动,但在Firefox 30和IE 11上效果很好。

我尝试使用,@-webkit-keyframes但是文本在Chrome中都不会移动。

html5 css3 css-animations

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

如何使用 elasticsearch _update_by_query 更新字符串字段?

我的索引已经填满了许多文件。
索引中的所有文档都有一个name字符串字段。
我想查询和更新所有具有并将其name = A设置为name = B.

为清楚起见,在 SQL 中,它类似于:
UPDATE FROM table SET name = 'B' WHERE name = 'A';

使用elasticsearch API,根据文档:https : //www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html

我试过这个查询:

POST my_index/_update_by_query
{
  "script": {
    "inline": "ctx._source.name = 'B'",
    "lang": "painless"
  },
  "query": {
    "term": {
      "name" : "A"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,它只是返回没有任何修改。我仍然可以找到 name=A 的文档,所以它们没有被编辑。

{
  "took": 1,
  "timed_out": false,
  "total": 0,
  "updated": 0,
  "deleted": 0,
  "batches": 0,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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

如何以完全兼容的方式将枚举值添加到 AVRO 模式?

我在 AVRO 模式中有一个枚举,如下所示:

{
    "type": "record",
    "name": "MySchema",
    "namespace": "com.company",
    "fields": [
        {
            "name": "color",
            "type": {
                "type": "enum",
                "name": "Color",
                "symbols": [
                    "UNKNOWN",
                    "GREEN",
                    "RED"
                ]
            },
            "default": "UNKNOWN"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当使用 FULL (这意味着 BACKWARD 和 FORWARD)兼容模式时,我应该如何向枚举添加新符号?这不可能吗?

我读到Avro schema :向现有架构添加枚举值是否向后兼容?但这没有帮助。

每当我尝试向符号添加新值时,即使我在枚举上有默认值,它也无法在架构注册表中进行兼容性检查。经过一番测试后,似乎添加新值是向后兼容的,但不是向前兼容的。但是,由于我设置的默认值,我希望它也兼容 FORWARD。事实上,旧的读取器模式应该能够读取新模式写入的值,并且当它不知道新符号时默认为“UNKNOWN”枚举值。

java avro confluent-schema-registry

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

使用Java,在同一cmd.exe窗口中运行多个命令

我正在开发一个偶尔会在Windows计算机上运行的Java应用程序.在某些时候,我需要运行一个Cygwin提示并在其中执行一些命令.

我找到了一个使用Runtime类的主题:http: //www.javaquery.com/2011/03/how-to-execute-multiple-command-in.html

但是它没有启动真正的cmd.exe窗口,它只在后台运行,输出只是打印在Eclipse控制台上.

我正在寻找一个运行真正的cmd.exe窗口的解决方案,我需要将尽可能多的命令传递给Windows shell.这可能吗?

java windows cmd runtime

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

命名空间std没有成员bind1st?

我有一个奇怪的错误,试图对指针向量使用for_each迭代
我想在每个指针上调用一个方法

objects_ 是类型的 vector<someClass*>

for_each(objects_.begin(), objects_.end(), std::bind1st(std::mem_fun(&someClass::someMethod), this));
Run Code Online (Sandbox Code Playgroud)

但这甚至没有编译,因为:

error C2039: 'bind1st' : is not a member of 'std'
error C2039: 'mem_fun' : is not a member of 'std'
error C3861: 'bind1st': identifier not found
error C3861: 'mem_fun': identifier not found
Run Code Online (Sandbox Code Playgroud)

然而,其他stl algortihms和方法正常工作.

我错过了什么吗?

c++ foreach stl

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

流分组:子列表到唯一的父列表

我正在寻找一种简洁有效的方法来从使用Java 8流的子项列表中获取唯一父项列表.

对于示例,我有两个简单的类:

public class Child{
  private Parent parent;
  public Child(Parent parent){
    this.parent = parent;
  }
  public Parent getParent(){
    return this.parent;
  }
}

public class Parent{
  private List<Child> children;
  public Parent(){
    this.children = new ArrayList<Child>();
  }
  public void addChild(Child child){
    this.children.add(child);
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,我从某种方法获得Child对象的列表.
孩子可能属于多个父母,可能有父母碰撞.

List<Child> children = getChildren();
Run Code Online (Sandbox Code Playgroud)

然后 :

List<Parent> uniqueParents = children
  .stream()
  .collect(Collectors.groupingBy(Child::getParent))
  .keySet()
  .stream()
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

所以它有效,但我想避免双流并收集.

这可能直接在一个流中吗?

java collections java-stream

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

我不能做一个简单的仿函数来比较字符串

我有这个仿函数类:

#include <string>

using namespace std;

class IsPlayerOfType
{
    public:
        IsPlayerOfType(const string& type) : type_(type) {}

        bool operator()(const Player* player) const
        {
            return (player->getType() == type_);
        }
    private:
        string type_;
};
Run Code Online (Sandbox Code Playgroud)

"Player"类表示具有多种方法和属性的玩家.其中,有getType()方法返回一个字符串.

在我的程序的某些时候,我有一个名为players_type 的变量vector<Player*>

最后,我有以下代码来计算我的向量中某种类型的玩家数量:

int number = count_if(players_.begin(), players_.end(), IsPlayerOfType("Defensive"));
Run Code Online (Sandbox Code Playgroud)

编译时我遇到很多错误,例如:

  • 错误C2011:'IsPlayerOfType':'class'类型重定义
  • 错误C2440:'':无法从'const char [10]'转换为'IsPlayerOfType'
  • 错误C2780:'iterator_traits <_Iter> :: difference_type std :: count_if(_InIt,_InIt,_Pr)':需要3个参数 - 提供2个参数

    我不太了解count_if是如何工作的,我试着写这段代码从这个答案中激励自己:https://stackoverflow.com/a/13525420

    我没有看到我错在哪里,编译器错误让我感到困惑.

c++ std functor

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