`

seam反向生成实体和查询解说

阅读更多

 一、
(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 反向工程_没有实体生成”的问题,使得项目开发能够顺利进行。对于初学者来说,参考像《Seam in Action》这样的专业书籍,以及阅读相关的技术博客,如提供的...

    Seam-gen生成基础项目骨架

    使用 `seam generate` 命令,Seam-gen 可以根据数据库信息生成对应的实体类和管理这些实体的 CRUD 操作。这一步通常需要提供数据库连接信息,如 URL、用户名和密码。Seam-gen 会基于 JPA(Java Persistence API)...

    jboss seam 学习资料,seam in action和官方手册

    5. **持久化与数据访问**:研究Seam如何通过JPA进行数据存储和检索,以及Seam的缓存和查询优化功能。 6. **国际化与本地化**:学习如何在Seam项目中实现多语言支持。 7. **测试与调试**:掌握Seam的测试工具和策略,...

    seam创建工程

    通过`persistence.xml`配置文件,你可以定义数据源和实体映射。 8. **测试与部署**:Seam提供了测试框架,可以进行单元测试和集成测试。完成开发后,将工程打包成WAR文件,部署到JBoss AS上进行运行。 9. **错误...

    seam的注解和标签

    Seam是一个Java EE框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Inversion of Control(IoC)和Enterprise JavaBeans(EJB)等技术融合在一起,为开发复杂的Web应用程序提供了便利。在Seam框架...

    JBOSS SEAM组件中文手册

    3. **Seam生成器(Seam Generator)**: 提供了一套工具,用于快速生成Seam项目和组件的模板代码,加速开发进程。 4. **测试框架**: Seam 2.0引入了集成测试框架,使得单元测试和集成测试变得更加方便。 5. **国际...

    SEAM 中文开发指南

    - **从现有数据库生成应用程序**:利用现有的数据库架构自动生成 SEAM 代码。 - **将应用部署为EAR**:打包为 EAR 文件以便部署到 Java EE 容器。 - **Seam与增量热部署**:支持热部署,提高开发效率。 - **在Jboss...

    Jboss Seam中文版

    7. **结合Seam和Hibernate的范例:Hibernate系统**:展示了一个利用Seam和Hibernate进行持久化的示例,包括如何设计实体类、配置映射关系等内容。 8. **RESTful的Seam应用程序:Blog示例**:通过一个博客系统,演示...

    为Seam做好准备

    8. **Seam工具**:Seam提供了一些工具,如Seam Gen,可以帮助快速生成项目结构和基础代码,学习如何使用这些工具能加速开发进程。 9. **Seam事件和上下文**:Seam引入了一种独特的事件模型和组件上下文,使得组件间...

    Seam_2.0_Reference_zh_CN

    Seam的实体管理和查询服务让数据库操作更加方便。 6. **事件驱动**:Seam的事件模型允许组件之间进行异步通信,增强了系统内的协作能力。开发者可以通过发布和监听事件来实现不同组件间的交互。 7. **安全性**:...

    使用 Maven 管理 Seam 项目

    在Seam项目中,我们可能还需要配置Maven插件,以便于处理Seam特有的任务,比如生成JPA实体的元数据、处理JSF资源等。例如,我们可以使用`seam-gen`插件来快速创建Seam组件和JPA实体: ```xml &lt;groupId&gt;org....

    seam参考手册中文版

    - **从现有数据库生成应用**: 介绍了基于已有数据库快速生成Seam应用的方法。 - **部署为EAR包**: 演示了如何将Seam应用打包并部署到生产环境。 - **热部署**: 介绍Seam支持的热部署特性,有助于提升开发效率。 ...

    seam 框架整合hibernate+jsf

    例如,Seam可以自动管理Hibernate的Session,提供事务控制,以及实现基于注解的实体管理和查询。 JavaServer Faces (JSF) 是一种用于构建Web用户界面的MVC(模型-视图-控制器)框架。JSF组件库强大,可帮助开发者...

    jboss seam 2.01GA REF DOC

    - **Seam 和 jBPM 集成**:通过将 Seam 组件与 jBPM 流程引擎相结合,实现业务流程的自动化。 - **任务管理**:Seam 负责用户界面和交互逻辑,jBPM 负责处理任务的执行流程。 **1.4.2 工作原理** - **流程定义**:...

    Seam - 语境相关的组件

    Seam提供了强大的查询API,使得编写复杂的数据库查询变得简单易懂。 在安全方面,Seam支持身份验证和授权,可以轻松地集成到已有的安全框架,如JAAS(Java Authentication and Authorization Service)。它还提供了...

    jboss-seam2.0文档

    Seam 2.0与JPA的集成使得数据库操作变得更加简单,支持实体管理和事务控制。 三、Seam 2.0的开发工具和资源 在`jbosseam2.0文档.CHM`中,开发者可以找到详细的API参考、教程、最佳实践以及常见问题解答。这份文档...

    Seam in Action

    开发者可以通过简单的注解,定义实体类和关系,实现对象-关系映射,从而减少了手动编写SQL语句的工作。 CDI(Contexts and Dependency Injection)是Java EE 6引入的一项重要特性,用于管理对象的生命周期和依赖...

    seam+hibernate注册例子

    - 创建Seam的组件配置文件`components.xml`,在这里声明你的实体管理器(EntityManager)和会话工厂(SessionFactory)。 - 使用@Name注解给实体管理器和会话工厂命名,便于在代码中引用。 4. **创建注册表单** ...

Global site tag (gtag.js) - Google Analytics