小编Mar*_*etz的帖子

由于 JPA AttributeConverter 导致数据丢失?

我使用 JPA 将我的数据保存到数据库中。具体来说,我使用 Hibernate 4.3.5 作为 JPA 实现。由于性能和保持表结构简单,我不会直接从对象 1:1 映射到表,而是一些我只保留为对象但不为其创建实体类的数据列表。取而代之的是,我将对象结构作为 JSON 序列化到数据库中。这种序列化/反序列化是用@Converter 完成的,而且效果很好。

简化代码:

@Entity
public class EntitySample {
  ...
  @Convert(converter=ConverterSample.class)
  private List<SampleObject> sampleList=new ArrayList<>();

  private String name;

  public List<SampleObject> getSampleList() {
    return sampleList;
  }

  public void setName(String newName) {
    name=newName;
  }
  ...
}

@Converter
public class ConverterSample implements AttributeConverter<List,String> {

  @Override
  public String convertToDatabaseColumn(List data) {
    return serializeToJSON(data);
  }

  @Override
  public List convertToEntityAttribute(String data) {
    return deserializeFromJSON(data);
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

如上所述,它主要是有效的!我在单元测试中检测到以下问题:

// create a new entity object with list …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa

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

从无状态EJB访问SessionScoped对象

我有一个SessionScoped类.对于每个用户访问,我需要一个自己的这个类的实例.一切都很好,很长一段时间.但是现在我还需要从后端访问这些对象,而无需任何用户交互.我确实有一个无状态的企业bean,但每当我想访问会话作用域对象时,我都会得到一个例外.一个简单的示例代码如下:

@SessionScoped
public class SessionObj implements Serializable {

    public String getValue() {
        return "Hello World";
    }
}

@Stateless
public class StatelessBean {

    private static final Logger LOG=Logger.getLogger(StatelessBean.class);

    @Inject
    private SessionObj sessionObj;

    public void test() {
        LOG.info("session object: "+sessionObj);
        LOG.info("Method call: "+sessionObj.getValue());
    }

}
Run Code Online (Sandbox Code Playgroud)

但调用测试方法的结果如下:

12:19:10,484 ERROR [org.jboss.as.ejb3.tx.CMTTxInterceptor] (EJB default - 6)    javax.ejb.EJBTransactionRolledbackException: WELD-001303 No active contexts for scope type javax.enterprise.context.SessionScoped
12:19:10,484 ERROR [org.jboss.ejb3.invocation] (EJB default - 6) JBAS014134: EJB Invocation failed on component StatelessBean for method public void package.StatelessBean.test(): javax.ejb.EJBTransactionRolledbackException: …
Run Code Online (Sandbox Code Playgroud)

java java-ee cdi

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

标签 统计

java ×2

cdi ×1

hibernate ×1

java-ee ×1

jpa ×1