我有一个注释:
@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface Example {
}
Run Code Online (Sandbox Code Playgroud)
以及用于处理的拦截器类:
@Interceptor
@Example
public class ExampleInterceptor implements Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个参数文本:
public @interface Example {
String text();
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何处理拦截器类中的参数.如何修改类的注释?
@Interceptor
@Example(text=???????)
public class ExampleInterceptor implements Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)
如果我写@Example(text="my text"),则只在方法/类注释时调用拦截器@Example(text="my text").但是我希望在参数值上独立调用拦截器 - @Example(text="other text").
以及如何获取参数值?我是否必须使用反思或有更好的方法吗?
我需要返回几个结果和结果总数的客户列表。我必须在具有不同实体的几个地方执行此操作,因此我想要一个具有这两个属性的通用类:
@XmlRootElement
public class QueryResult<T> implements Serializable {
private int count;
private List<T> result;
public QueryResult() {
}
public void setCount(int count) {
this.count = count;
}
public void setResult(List<T> result) {
this.result = result;
}
public int getCount() {
return count;
}
public List<T> getResult() {
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
和服务:
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public QueryResult<TestEntity> findAll(
QueryResult<TestEntity> findAll = facade.findAllWithCount();
return findAll;
}
Run Code Online (Sandbox Code Playgroud)
实体不重要:
@XmlRootElement
public class TestEntity implements Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)
但这会导致: javax.xml.bind.JAXBException: class test.TestEntity nor …
首先,我使用Java EE,Hibernate与EntityManager和PrimeFaces.
我有一个EJB模块(业务逻辑和域)和两个WAR模块(Jersey WS和JSF PrimeFaces).
我决定在JSF WAR模块中初始化延迟集合,以避免延迟初始化异常.我不使用扩展实体管理器.
@ManagedBean(name = "company")
@SessionScoped
public class CompanyBean {
@EJB
private CompanyFacade cf;
...
public String showDetails(Long id) {
company = cf.find(id);
Hibernate.initialize(company.getCompanyTypes());
Hibernate.initialize(company.getPrimaryUser());
Hibernate.initialize(company.getBlocked());
Hibernate.initialize(company.getAddresses());
Hibernate.initialize(company.getContacts());
return "DETAILS";
}
...
}
Run Code Online (Sandbox Code Playgroud)
我得到:
Caused by: org.hibernate.HibernateException: collection is not associated with any session
at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:474)
at org.hibernate.Hibernate.initialize(Hibernate.java:417)
at minepackage.CompanyBean.showDetails(CompanyBean.java:79)
...
我不明白.在从数据库中提取初始化之前必须有一个会话,不是吗?我以类似的方式初始化WS模块中的属性,并且它正在工作.
知道发生了什么事吗?
java ×3
hibernate ×1
interceptor ×1
java-ee ×1
java-ee-6 ×1
jaxb ×1
jersey ×1
jsf ×1
primefaces ×1