接口设计模式/Java/Seam

接口设计模式/Java/Seam,java,jakarta-ee,seam,interceptor,Java,Jakarta Ee,Seam,Interceptor,这有可能吗 @Name("geolocationService") public interface GeolocationService { @Query("SELECT g FROM Geolocation geolocation INNER JOIN geolocation.deployment deployment WHERE geolocation.ipStart <= INET_ATON(:ipAddress) AND deployment.active = TRUE")

这有可能吗

@Name("geolocationService")
public interface GeolocationService
{
   @Query("SELECT g FROM Geolocation geolocation INNER JOIN geolocation.deployment deployment WHERE geolocation.ipStart <= INET_ATON(:ipAddress) AND deployment.active = TRUE")
   Geolocation findByIpAddress(@NamedParameter("ipAddress")final String ipAddress);
}


public GeolocationAction
{
  @In
  private GeolocationService geolocationService;

  @RequestParameter("ipAddress")
  private String ipAddress;

  @Out
  private Geolocation geolocation;

  public void find()
  {
    geolocation = geolocationService.findByIpAddress(ipAddress);
  }
}
@Name(“地理定位服务”)
公共接口地理定位服务
{

@查询(“从Geolocation Geolocation internal JOIN Geolocation.deployment WHERE Geolocation.ipStart中选择g首先,接口不应该是seam组件。您将如何实例化该seam组件(接口)

其次,你不能像那样使用
@Query

第三,你到底在问什么?
我不明白你的问题。

我真的不知道Seam是什么,我也看不到一段简单的描述,所以我可能在谈论一些完全无关的东西


我有一个想法,就是只使用一些注释来运行SQL过程。这个实现来自一个。

目前,我将所有方法包装在我的服务中。我会自动找到他们正在查找的查询并注入参数(命名或索引).这不是我想要的那么干净,但还有改进的余地

我编写了一个接口和一个实现,除了return(null)之外,主体中没有代码


Walter

@Query是我的注释。在以后的迭代中,我只是简单地使用NamedQuery注释,然后根据方法名称创建命名查询。它不需要是Seam组件,我只想给出一个查询参数,而不必编写实现,这将是一项冗余工作。WalterI最初的想法是关于编写一个启动侦听器来创建必要的查询/组件,但我只想要一个参数化方法,而不需要编写方法本身。在我参与的另一个项目中,我们使用拦截器自动获取适当的查询,并从一个接口传入参数。如果我觉得拦截器不会增加太多开销。是的,我确实需要动态代理-我正在使用JBoss Seam和Javassist,所以我可能至少需要阅读Javassist或JBoss AOP。我还想进行一些比较,看看运行完全相同的查询需要多少开销。很长一段时间以来,我使用Seam Entity查询是通过XML配置的,或者正如我所做的那样,我编写了自己的启动侦听器,从注释创建它们。此外,您还可以扩展该类并在那里静态设置查询。我喜欢声明命名查询的想法,但不必在实体bean上声明。