一、
(1)数据库表:user_site,在创建时候没有建立外键关系.有表user和site。user_site是中间表,它们是多对多关系。
(2)用seam反向生成的实体是这样的:
public class UserSite implements java.io.Serializable {
private Long id;
private Long userId;
private Long siteId;
}
这里并没有对应关系。
(3)这样写查询的时候比较方便。
public List<Site> getSiteResults() {
Long userid = user2.getId();
siteList.setEjbql("select distinct(s) from UserSite userSite,Site s where userSite.siteId=s.id and userSite.userId = "+userid);
if(siteList.getResultCount()>0){
return siteList.getResultList();
}else{
return null;
}
}
这里一定要注意要加上distinct,因为是多对多的关系,在中间表中肯定有重复的数据,一定要过滤掉。
二、
(1)movie_actor表是中间表,但是它在创建的时候有设置外键。有movie和actor表,它们是多对多的关系。
(2)用seam反向生成实体时:代码如下:
public class MovieActor implements java.io.Serializable {
private Long id;
private Actor actor;
private Movie movie;
}
这里就有对应的关系。
(3)这时的查询语句就麻烦了。哈哈哈! 终于找到解决的办法了。
public List<Movie> getMovieResults() {
movieList.setEjbql("select distinct(movie) from Movie movie, MovieActor movieActor where movie.id=movieActor.movie.id and movieActor.actor.id = "+actorId);
if(movieList.getResultCount()>0){
return movieList.getResultList();
}else{
return null;
}
}
上面那个方法太复杂啦,知道主键ID,可以有更快的办法来找到这个类对象。下面是代码:
public StorageServer getStorageServerObject(Long storageServerId){
if(storageServerId != null && !"".equals(storageServerId)){
return entityManager.find(StorageServer.class, storageServerId);
}else{
return null;
}
}
三、
第一种的下拉列表框的代码:
(1)
<s:decorate id="serverIdField" template="../layout/edit.xhtml">
<ui:define name="label">website server</ui:define>
<h:selectOneMenu value="#{site.serverId}" style="width:115px;">
<f:selectItems value="#{siteHome.serverItems}"/>
<a:support event="onblur" reRender="serverIdField" bypassUpdates="true" ajaxSingle="true"/>
</h:selectOneMenu>
</s:decorate>
(2)后台java类:
@SuppressWarnings("unchecked")
public SelectItem[] getServerItems(){
Query query = entityManager.createQuery("select storageServer from StorageServer storageServer where storageServer.type = 2");
List<StorageServer> list = query.getResultList();
SelectItem[] serverItems = new SelectItem[list.size()+1];
serverItems[0] = new SelectItem("","");
if (list.size() > 0){
for (int i = 0; i < list.size(); i++){
StorageServer server = list.get(i);
serverItems[i+1] = new SelectItem(server.getId(),server.getName());
}
}
return serverItems;
}
第二种的下拉列表框:
(1)这里的页面中还要加个标签库:
xmlns:c="http://java.sun.com/jstl/core"
<s:decorate id="selectsites" template="../layout/edit.xhtml" >
<ui:define name="label">Select Sites</ui:define>
<h:selectManyMenu value="#{newscreate.chosesites}" style="float:left;width:115px;height:80px;">
<c:forEach items="#{newscreate.siteResults}" var="site">
<f:selectItem itemValue="#{site.id}" itemLabel="#{site.name}"></f:selectItem>
</c:forEach>
</h:selectManyMenu>
</s:decorate>
(2)后台java代码:
public List<Site> getSiteResults() {
Long userid = user2.getId();
siteList.setEjbql("select distinct(s) from UserSite userSite,Site s where userSite.siteId=s.id and userSite.userId = "+userid);
if(siteList.getResultCount()>0){
return siteList.getResultList();
}else{
return null;
}
}
分享到:
相关推荐
通过上述的分析和解决步骤,应该能够帮助开发者解决“seam 反向工程_没有实体生成”的问题,使得项目开发能够顺利进行。对于初学者来说,参考像《Seam in Action》这样的专业书籍,以及阅读相关的技术博客,如提供的...
使用 `seam generate` 命令,Seam-gen 可以根据数据库信息生成对应的实体类和管理这些实体的 CRUD 操作。这一步通常需要提供数据库连接信息,如 URL、用户名和密码。Seam-gen 会基于 JPA(Java Persistence API)...
5. **持久化与数据访问**:研究Seam如何通过JPA进行数据存储和检索,以及Seam的缓存和查询优化功能。 6. **国际化与本地化**:学习如何在Seam项目中实现多语言支持。 7. **测试与调试**:掌握Seam的测试工具和策略,...
通过`persistence.xml`配置文件,你可以定义数据源和实体映射。 8. **测试与部署**:Seam提供了测试框架,可以进行单元测试和集成测试。完成开发后,将工程打包成WAR文件,部署到JBoss AS上进行运行。 9. **错误...
Seam是一个Java EE框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Inversion of Control(IoC)和Enterprise JavaBeans(EJB)等技术融合在一起,为开发复杂的Web应用程序提供了便利。在Seam框架...
3. **Seam生成器(Seam Generator)**: 提供了一套工具,用于快速生成Seam项目和组件的模板代码,加速开发进程。 4. **测试框架**: Seam 2.0引入了集成测试框架,使得单元测试和集成测试变得更加方便。 5. **国际...
- **从现有数据库生成应用程序**:利用现有的数据库架构自动生成 SEAM 代码。 - **将应用部署为EAR**:打包为 EAR 文件以便部署到 Java EE 容器。 - **Seam与增量热部署**:支持热部署,提高开发效率。 - **在Jboss...
7. **结合Seam和Hibernate的范例:Hibernate系统**:展示了一个利用Seam和Hibernate进行持久化的示例,包括如何设计实体类、配置映射关系等内容。 8. **RESTful的Seam应用程序:Blog示例**:通过一个博客系统,演示...
8. **Seam工具**:Seam提供了一些工具,如Seam Gen,可以帮助快速生成项目结构和基础代码,学习如何使用这些工具能加速开发进程。 9. **Seam事件和上下文**:Seam引入了一种独特的事件模型和组件上下文,使得组件间...
Seam的实体管理和查询服务让数据库操作更加方便。 6. **事件驱动**:Seam的事件模型允许组件之间进行异步通信,增强了系统内的协作能力。开发者可以通过发布和监听事件来实现不同组件间的交互。 7. **安全性**:...
在Seam项目中,我们可能还需要配置Maven插件,以便于处理Seam特有的任务,比如生成JPA实体的元数据、处理JSF资源等。例如,我们可以使用`seam-gen`插件来快速创建Seam组件和JPA实体: ```xml <groupId>org....
- **从现有数据库生成应用**: 介绍了基于已有数据库快速生成Seam应用的方法。 - **部署为EAR包**: 演示了如何将Seam应用打包并部署到生产环境。 - **热部署**: 介绍Seam支持的热部署特性,有助于提升开发效率。 ...
例如,Seam可以自动管理Hibernate的Session,提供事务控制,以及实现基于注解的实体管理和查询。 JavaServer Faces (JSF) 是一种用于构建Web用户界面的MVC(模型-视图-控制器)框架。JSF组件库强大,可帮助开发者...
- **Seam 和 jBPM 集成**:通过将 Seam 组件与 jBPM 流程引擎相结合,实现业务流程的自动化。 - **任务管理**:Seam 负责用户界面和交互逻辑,jBPM 负责处理任务的执行流程。 **1.4.2 工作原理** - **流程定义**:...
Seam提供了强大的查询API,使得编写复杂的数据库查询变得简单易懂。 在安全方面,Seam支持身份验证和授权,可以轻松地集成到已有的安全框架,如JAAS(Java Authentication and Authorization Service)。它还提供了...
Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...
Seam 2.0与JPA的集成使得数据库操作变得更加简单,支持实体管理和事务控制。 三、Seam 2.0的开发工具和资源 在`jbosseam2.0文档.CHM`中,开发者可以找到详细的API参考、教程、最佳实践以及常见问题解答。这份文档...
开发者可以通过简单的注解,定义实体类和关系,实现对象-关系映射,从而减少了手动编写SQL语句的工作。 CDI(Contexts and Dependency Injection)是Java EE 6引入的一项重要特性,用于管理对象的生命周期和依赖...