小编Edd*_*die的帖子

JPA和Hibernate中的LazyInitializationException

我知道这个问题在这里和互联网上已被多次询问,我已经阅读了很多这些答案,但我仍然不明白解决这个问题的正确方法.我正在尝试使用Spring MVC和JPA,每次访问一个延迟加载的属性时,我都会得到一个LazyInitializationException.

以下是我正在尝试的一些代码:

@Repository
public class MyDAO {
    private static final Logger logger = LoggerFactory.getLogger(MyDAO.class);

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public void logDOI() {
        DOI myDOI = em.find(DOI.class, Long.valueOf(1));

        // This line gives the expected output
        logger.info("Fetched DOI: " + myDOI.getDoiKey());

        // This line throws the LazyInitalizationException
        for(DOIMembership m : myDOI.getDoiMemberships()) {
            logger.info("Got DOI Membership id: " + m.getId());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在访问的实体:

@Entity
@Table(name="DOI")
public class DOI implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="DOI_ID_GENERATOR", …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa

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

将Python和依赖项部署到Elastic Beanstalk

我有两个python项目共享一些公共库,所有这些都组织成三个git存储库:project1,project2和common-lib.这两个项目都是为了部署到与common-lib捆绑在一起的弹性beanstalk.

我正在尝试找到构建这些项目的最惯用的方法,以便在本地开发,并使用eb deploy构建zip文件以进行部署.

为本地开发设置一切很容易.只需检查每个repo并python setup.py develop在common-lib中执行以使virtualenv中的公共库可用.

对于EB部署,最好有一个setup.py命令,它生成一个包含项目的EB兼容zip文件,以及带有requirements.txt文件的common-lib,该文件列出了两者的pip依赖关系.我还没有找到一个简单的方法来做这个有点令人惊讶,因为我想这是一个相当常见的情况.

我无法在project1或project2的requirements.txt文件中为common-lib指定git存储库,因为无法从AWS访问存储库.

python amazon-web-services amazon-elastic-beanstalk

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

拦截杰克逊的反序列化

我想挂钩杰克逊的反序列化,以选择反序列化不同于提供的JSON文档的JSON文档.这似乎是一个非常奇怪的用例,所以让我解释一下.

我正在使用Amazon SQS Extended客户端在S3上放置对于SQS而言太大的消息,并通过SQS显示如下所示的消息

["com.amazon.sqs.javamessaging.MessageS3Pointer",{"s3BucketName":"my-bucket","s3Key":"f5a0fa29-7f9c-4852-8bbb-53697799efe2"}]
Run Code Online (Sandbox Code Playgroud)

一个弹性beanstalk工作者正在监听另一端,这意味着这些消息被POST到我的应用程序维护的Jersey端点.由于这些消息是POST而不是使用SQS receiveMessage调用,因此扩展客户端不会从S3本身获取消息.

我认为制作一个自定义的自定义将是非常聪明的JsonDeserializer,看看它是否是一个S3指针,下载该文件,并反序列化它.否则,只需反序列化提供的消息.然而,这并不像我希望的那样顺利.

这是我到目前为止:

public class SQSS3Deserializer<T> extends JsonDeserializer<T> {
    private static final String s3PointerHeader = "com.amazon.sqs.javamessaging.MessageS3Pointer";
    private Class<T> type;
    private ObjectMapper mapper = new ObjectMapper();

    public SQSS3Deserializer() {
        super();

        type = getParameterizedTypeArgument();
    }

    @Override
    public T deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
        if (jp.isExpectedStartArrayToken()) {
            jp.nextToken();
            if (s3PointerHeader.equals(jp.getValueAsString())) {
                jp.nextToken();
                S3Pointer p = jp.readValueAs(S3Pointer.class);
                return mapper.readValue(S3Utils.getInputStream(p.s3BucketName, p.s3Key), type);
            }
        }

        return jp.readValueAs(type);
    }

    @SuppressWarnings("unchecked")
    protected Class<T> getParameterizedTypeArgument() { …
Run Code Online (Sandbox Code Playgroud)

java jackson

6
推荐指数
0
解决办法
604
查看次数

具有PostGIS地理类型的休眠空间

我刚刚在Postgres数据库中添加了Geography类型的列,应用程序可以使用休眠和休眠空间对其进行访问。每当我使用休眠模式访问该列时,都会出现错误消息“无法转换org.postgresql.util.PGobject类型的对象”。我使用的是较旧的休眠空间版本,但似乎即使最新版本也不支持Geography数据类型。是真的吗?还是我只是想念一些东西。有没有办法可以解决此限制?

hibernate postgis

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

并发 findAndModify 查询成功更新同一文档

我有一个用 Java 编写的任务工作线程,并使用 MongoDB 3.4 副本集运行许多线程,每个线程基本上都执行此操作。

  • 运行任务
  • 通过在 MongoDB 中更新该任务的文档来表明任务已完成
  • 运行查询以查看这组任务中的所有任务是否都已完成
    • 如果是,则继续下一阶段的处理
    • 否则,什么也不做

正如您可能看到的,这里存在竞争条件;多个任务可以几乎同时完成,并认为它们是最后完成的任务。我想使用 MongoDB 来确保只允许其中一个任务开始下一阶段的处理。

我有以下代码,旨在确保只有其中一项任务可以继续(我正在使用 Jongo 与 MongoDB 交互)。

Chipset modified = chipsets
  .findAndModify("{_id: #, status: {$ne: #}}", new Object[] { chipset.getId(), Chipset.Status.Queued })
  .with("{$set: {status: #}}", new Object[] { Chipset.Status.Queued })
  .returnNew().as(Chipset.class);

if (modified != null)
    runNextProcessingStep();
Run Code Online (Sandbox Code Playgroud)

这里很简单;我只是使用 findAndModify 将芯片组(任务集)的状态更改为“已排队”。成功进行更改的人将执行 runNextProcessingStep()。

或者我认为这应该是这样的。实际上,有几个任务,即使是相隔 2 秒完成的任务,也会以某种方式返回非 null modified。据我了解,MongoDB 应该在运行 findAndModify 时锁定文档,以便非空文档只能返回一次。

我已经通过findAndModify阅读了线性化读取并实现了其中所说的所有内容。我已将连接写入关注点设置为“多数”,将读取关注点设置为“线性化”。我在 _id 和 status 上创建了一个唯一的复合索引。依然没有。也许我误解了 findAndModify 的实际行为?我究竟做错了什么?

java mongodb

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

Spring MVC获取包含点和斜杠的PathVariables

我希望匹配表单的URL http://host/10.39284/LKJF283/23332/dd(路径始终以10开头,其余的将是点,斜线,字母和数字的混合)并将整个事物存储在PathVariable之后并将其包括在10.V之后.

我以为我可以用这样的正则表达式做到这一点:

@RequestMapping(value="/{key:10\.+}", method=RequestMethod.GET)
    public String summary(@PathVariable String key, Model model) {
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误,说"无效的转义序列".知道我怎么能做到这一点?

spring-mvc

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