??xml version="1.0" encoding="utf-8" standalone="yes"?>永久在线免费观看,国产精品成人播放,国产精品视频首页http://www.aygfsteel.com/luluyanglu/category/38321.htmlzh-cnMon, 26 Oct 2009 14:22:44 GMTMon, 26 Oct 2009 14:22:44 GMT60ejb3W记 http://www.aygfsteel.com/luluyanglu/archive/2009/10/20/299008.html大鱼大鱼Tue, 20 Oct 2009 04:34:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/10/20/299008.htmlhttp://www.aygfsteel.com/luluyanglu/comments/299008.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/10/20/299008.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/299008.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/299008.htmlhibernate_ejb3W记    1、用MyEclipse通过q接到数据库Q可以生成Hibernate需要的POJO和对应的映射文g。但是我生成的hbm.xml有问题,会报?could not load an entity"。后来找C元凶
<class name="hbm.pojo.Misuser" table="misuser" schema="informix" catalog="zzymis">
把catalog="zzymis"LOK了?br />
   2、Hibrenate保存数据p|
   如果忘记提交事务会导致数据保存或者更新失败,正确代码如下Q?br />    HibernateSessionFactory. getSession().beginTransaction();
   
new hbm.pojo.StudySubjectDAO().merge(subject);
   HibernateSessionFactory. getSession().flush();
   HibernateSessionFactory. getSession().getTransaction().commit();

   3、Hibernate一对多的配|?
最好用双向关联(假设Main->DetailQ?br /> 1QMain.java中加入:
   
private Set< Detail > detail=new HashSet();
   然后加入get()和set()ҎQ?br />
2QDetail.java中加入:
   
private Main mainQ?br />    然后加入get()和set()ҎQ另外别忘了重写equals()Ҏ
    
public boolean equals(Object object) {
        
if (object == null || !this.getClass().equals(object.getClass())) {
            
return false;
        }

        Detail other 
= (Detail)object;
        
if(other.id==null||this.id==null)
            
return false;
        
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) 
        
return false;
        
return true;
    }

3QMain.hbm.xml中加入:
   
<set name="detail" inverse="true" cascade="all">
         
<key column="mainId"></key>
         
<one-to-many class=" Detail"/>
   
</set>
4)Detail.hbm.xml中加入:
   
<many-to-one name=" main " class=" Main" column=" mainId">
   
</many-to-one>
   同时把mainId对应?/span><property>……</property>删掉
5Q操作:
   双向讄Q(调用setMain()setDetail()Q?/span>

   4、EJB中的getSingleResult()Ҏ
    查找q回一个结?是唯一的一个结果,当getSingleResult()个方法被调用时执行查询。如果没有结果返?q个Ҏ会抛出javax.persistence.EntityNotFoundExceptionq行异常.如果扑ֈ多于一个结? javax.persistence.NonUniqueResultException异常会在运行期间抛?因ؓq两个异帔R是RuntimeException,例子中的代码不需要完整的try/catch块?br />
   5、Hibernate3的解决中文查询问?
   如果直接把查询的参数攑ֈsql语句中是查不出来的,比如Q?br />    Query query=em.createQuery("select u from User u where u.name like '%"+myName+"%'"); 
   可以使用占位W或者设|参数的Ҏ来查询,例如Q?br />    
1)Query query=em.createQuery("select u from User u where u.name like ? "); 
     query.setString(
0,"%"+myName+"%");
   
2)Query query=em.createQuery("select u from User u where u.name like :name");
     query.setString("name","
%"+myName+"%");

   6、Like的其他用法(正则Q?
   like '_heryl' Q搜索以字母 heryl l尾的所有六个字母的名称Q如 Cheryl、SherylQ?br />    like '[CK]ars[eo]n' Q搜索下列字W串QCarsen、Karsen、Carson ?nbsp;KarsonQ如 CarsonQ?br />    like '[M-Z]inger' Q搜索以字符?nbsp;inger l尾、以从M到Z的Q何单个字母开头的所有名U如 ?br />    like 'M[^c]%' Q搜索以字母 M 开_q且W二个字母不?nbsp;c 的所有名Uͼ?nbsp;MacFeatherQ?nbsp;

   7、一对多(one-to-many)删除不掉
   比如Main-to-Detail是one-to-many关系Q在新增的时候可以通过persistMain()同时把多个Detail插入数据库,但是如果惛_除某个Main中的某几个DetailӞ好像通过mergeMain()是无法做到的Q通过mergeMain()可以更新Main的属性,但是没办法删除相应的DetailQ至我是没办法做到。这Ӟ我一半都是写个方法单独来删除DetailQ例如deleteDetailById()来一个个删除?br />  
   8、查询返回多个实体Bean
   1)查询(省略后的代码)
   @PersistenceContext(unitName
="crm")
   
private EntityManager em;
   
public List getUserinfoTrace(){
    
return em.createQuery("select new List(u,t)  from Userinfo u,Trace t where u.id=t.id").getResultList();
   }
   
2)d(省略后的代码)
   List
<List> result=(List<List>)remote.getUserinfoTrace();
   
for(List obj:result){
      Userinfo userinfo
=(Userinfo)result.get(0);
      Trace trace
=(Trace)result.get(1);
      ……
   }

   9、设|ID自增
在用netbean生成的实体Bean后,需要手工加上自增注释(@GeneratedValue(strategy = GenerationType.AUTO)Q?br /> 例如Q?br /> @Id
@Column(name 
= "id", nullable = false)
@GeneratedValue(strategy 
= GenerationType.AUTO)
private Integer id;

   10、failed to lazily initialize a collection of role
   因ؓ延迟加蝲D的,但是我在EntityBean中用fetch=FetchType.EAGER和FetchType.LAZY都无效,我的EntityBean是@OneToManyQ最后只有在SessionBean的读取EntityBean的方法中加入Q?
   if(main.getDetails()!=null)
      main.getDetails().size();
   
return main;
   q样ȝ解决问题?

大鱼 2009-10-20 12:34 发表评论
]]>
EJB3 QL查询http://www.aygfsteel.com/luluyanglu/archive/2009/10/20/298924.html大鱼大鱼Tue, 20 Oct 2009 01:09:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/10/20/298924.htmlhttp://www.aygfsteel.com/luluyanglu/comments/298924.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/10/20/298924.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/298924.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/298924.html
EJB3的查询语a是一U和SQL非常cM的中间性和对象化查询语a。它可以被编译成不同的底层数据库能接受的SQLQ从而屏蔽不同数据库的差异,保用EJB3 QL查询语言~写的代码可在不同的数据库上q行。比?span class="hilite1">EJB 2.1的查询语aQEJB3可以q行期构造,支持多态,q远?span class="hilite1">EJB 2.1的查询更灉|和功能强大。在E序中用EJB3 QL可以使用大写(SELECT)或者小?select)Q但不要大小?比如:Select)混合使用?
   
Query接口

javax.persistence.Query是EJB3查询操作的接口。进行查询,首先要通过EntityManager 获得Query对象?

               
    public Query createQuery(String ejbqlString);                
               
           

下面我们做一个最单的查询Q查询所有的com.redsoft.samples.OrdercR?

               
    final Query query = entityManager.createQuery( "select o from Order o");
    final List result = query.getResultList();
    final Iterator iterator = result.iterator();
    while( iterator.hasNext() ){
        // 处理Order
    }
               
           

注意"from Order"?Order"在EJB3查询中称为com.redsoft.samples.Ordercȝabstract schema Type。查询Entity在EJB3 QL中都是针对Entity的Abstract Schema Typeq行查询。在同一个EntityManagerFactory中,不允许同时有两个Abstract Schema Type相同的EntitycR比如不允许同时有com.redsoft.samples.Order和com.redsoft.foo.Order。  

Queryq回一个List的集合结果,我们可以用Iterator或者List.get( int )的方法来获得每个W合条g的Entity。Liberator EJB3 Persistenceq行环境的Query查询在构造Query的时候的只是把EJB3 QL~译成相应的SQLQ但q不执行。只有当应用代码W一ơ调用Iterator.next(),Iterator.hasNext()或?List.get( int )Ҏ的时?~译后的SQL才会被真正的执行?

在Liberator EJB3 Persistenceq行环境q回的结果集合中Qƈ不保存所有的l果Q而只是保持一个指向JDBC ResultSet或者缓存ResultSet的一个行(row)指针。只有当用户实需要获得Entity实例的时候,才会从ResultSet中获取数据ƈ填充到Entity实例中返回给应用?

如果查询l果l合中包含所有符合条件的Entity, Liberator EJB3 Persistenceq行环境默认会自动缓存每ơ查询的l果。这样下ơ同L查询操作无需讉K数据库,而直接从~存中返回结果集合。但如果在下ơ查询操作之前,有针对被~存的Entityc进行update/insert/delete操作Q则~存的结果集合会自动被清I,q样下次查询׃从数据库获得数据Q?保查询L获得正确的结果,避免~存脏数据?

有时候查询会q回量的数据。Liberator EJB3q行环境采用了自适应的弱引用POJO理机制Q可以处理v量的数据。在我们的测试中和客L环境可以处千万别的数据量。但在处理大数据量的时候,注意关闭寚w合结果的~存?

               
   
    // 假设q回的结果数量巨?
    final Query query = entityManager.createQuery( "select o from Order o");
   
    // 关闭Ҏ询结果的~存
    query.setHint( Constants.QUERY_RESULT_CACHE, "false");
    final List result = query.getResultList();
    final Iterator iterator = result.iterator();
   
    // q里我们可以处理量的数?
    while( iterator.hasNext() ){
        // 处理Order
    }
               
           

  
单查?
下面是一个简单查询的例子Q可以看到和SQL的用方法很cM?

               
    final Query query = entityManager.createQuery( "select o from Order o where o.id = 1");
   
    final Query query = entityManager.createQuery( "select o from Order o where o.id = 1 and o.confirm = 'true' ");
   
    final Query query = entityManager.createQuery( "select o from Order o where o.id = 1 or o.customer = 'foo' ");
   
   
    // address是OrdercM的一个对象变量属性,Address有一个streetNumber的属?
    final Query query = entityManager.createQuery( "select o from Order o where o.address.streetNumber >= 123" );

             
   

注意条g语句中查询的是Entity的属性,属性的名字需要和Entity中的属性变量名字一致?
使用参数查询

参数查询也和SQL中的参数查询cM。EJB3 QL支持两种方式的参数定义方? 命名参数和位|参数。在同一个查询中只允怋用一U参数定义方式?
命名参数:

               
    final Query query = entityManager.createQuery( "select o from Order o where o.id = :myId");
   
    // 讄查询中的参数
    query.setParameter( "myId", 2 );
   
   
    // 可以使用多个参数
    final Query query = entityManager.createQuery( "select o from Order o where o.id = :myId and o.customer = :customerName" );
       
    // 讄查询中的参数
    query.setParameter( "myId", 2 );
    query.setParameter( "customerName", "foo" );
             
   

注意不允许在同一个查询中使用两个相同名字的命名参数?

位置参数Q?

               
    final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1");
   
    // 讄查询中的参数
    query.setParameter( 1, 2 );// 1表示W一个参敎ͼ2是参数的?
   
    //或?
    final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1").setParameter( 1, 2 );
       
   
    // 可以使用多个参数
    final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1 and o.customer = ?2" );
       
    // 讄查询中的参数
    query.setParameter( 1, 2 );
    query.setParameter( 2, "foo" );
             
   

如果在未来需要在不同的EJB3 q行环境中运行,请用位|参敎ͼ保证应用是可UL的?
排序(order by)
下面是一个简单查询的例子Q可以看到和SQL的用方法很cM?ASC"?DESC"分别为升序和降序Q如果不昑ּ注明QEJB3 QL中默认ؓasc升序?

               
    // 不注明的话,默认为asc为升?              
    final Query query = entityManager.createQuery( "select o from Order o order by o.id");
   
    final Query query = entityManager.createQuery( "select o from Order o order by o.address.streetNumber desc");// desc为降?
   
    final Query query = entityManager.createQuery( "select o from Order o order by o.id, o.address.streetNumber");
           
   

查询部分属?
在前面的例子中,都是寚w对Entitycȝ查询Q返回的也是被查询的Entitycȝ实体。EJB3 QL也允许我们直接查询返回我们需要的属性,而不是返回整个Entity。在一些Entity中属性特别多的情况,q样的查询可以提高性能?

               
    // 直接查询我们感兴的属?列)
    final Query query = entityManager.createQuery( "select o.id, o.customerName, o.address.streetNumber from Order o order by o.id");
   
    // 集合中的不再是Order,而是一个Object[]对象数组
    final List result = query.getResultList();
   
    // W一个行
    Object[] row = result.get( 0 );
   
    // 数组中的W一个值是id
    int id = Integer.parseInt( row[0].toString() );
    String customerName = row[1].toString();
    String streetNumber = Integer.parseInt( row[2].toString() );
  
           
   

查询中用构造器(Constructor)
EJB3 QL支持查询的属性结果直接作Z个java class的构造器参数Qƈ产生实体作ؓl果q回?

               
    // 我们把需要的三个属性作Z个class( OrderHolder )的构造器参数Qƈ使用new函数?nbsp;              
    Query query = entityManager.createQuery("select new com.redsoft.ejb3.dummy.OrderHolder (   o.id, o.vender, o.partNumber  )  FROM Order AS o");
   
    // 集合中的l果是OrderHolder
    List result = query.getResultList();
           
        
   

该java class不需要是Entity Class。NEW要求java class使用全名?
聚合查询(Aggregation)

象大部分的SQL一?EJB3 QL也支持查询中的聚合函数。目?span class="hilite1">EJB QL支持的聚合函数包括:

    * AVG
    * SUM
    * COUNT
    * MAX
    * MIN

                   
                   
    final Query query = entityManager.createQuery( "select MAX( o.id ) from Order where o.customerName='foo'");
       
    // 如果我们知道l果是单个,我们可以用getSingleResult()获得l果
    final Object result = query.getSingleResult();
       
    // ׃Order中id的类型ؓlong,
    final Long max = (Long)result;
       
       
    // 在一些数据库中max函数q回的结果的cd不一定于id对应的列的类型相W,更安全的方式可以采用string来{?
    fina long max = Long.parseLong( result.toString() );
               
       

聚合函数也可以作查询的一个属性返回?

                   
   
    // q回所有的订单的生产厂商和他们的订单h值总额
    final Query query
        = entityManager.createQuery( "select o.vender, sum(o.amount) FROM Order o group by o.vender");");
               
       

和SQL一P如果聚合函数不是select...from的唯一一个返回列Q需要?GROUP BY"语句?GROUP BY"应该包含select语句中除了聚合函数外的所有属性?

                   
   
    // q回所有的订单的生产厂商的的名字,货物L和每U货物的订单价值总额
    // 注意group by后面必须包含o.vender和o.partNumber
    final Query query
        = entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o group by o.venderQo.partNumber");
               
       

如果q需要加上查询条Ӟ需要?HAVING"条g语句而不?WHERE"语句?

                   
   
    // q回所有的订单的生产厂商是"foo"的货物号码和每种货物的订单h值总额
    // q里"having o.vender = 'foo'为条?
    final Query query
        = entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o 
            group by o.venderQo.partNumber having o.vender='foo'");
       
       

?HAVING"语句里可以跟"WHERE"语句一样用参数?

                   
   
    // q回所有的订单的生产厂商是"foo"的货物号码和每种货物的订单h值总额
    // q里"having o.vender = 'foo'为条?
    final Query query
        = entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o 
            group by o.venderQo.partNumber having o.vender=?1");
    query.setParameter( 1, "foo" );
    final List result = query.getResultList();
       
       

兌(join)

在EJB3 QL中,大部分的情况下,使用对象属性都隐含了关?join)。例如在以下查询中:

               
    final Query query = entityManager.createQuery( "select o from Order o
         where o.address.streetNumber=2000 order by o.id");
  
           
   

当这个句EJB3 QL~译成以下的SQL时就会自动包含了兌,EJB3 QL~译成SQL时关联默认取左关?left join)?

   
    select o.id, o.vender, o.partNumber, o.amount, addressTable.id, addressTable.streetNumber
        from orderTable as o left join addressTable where addressTable.streetNumber = 2000
     
   

但在一些情况下Q我们仍焉要对兌做精的控制。因此EJB3 QL仍然支持和SQL中类似的兌语法Q?

    * left out join/left join
    * inner join
    * left join/inner join fetch

left join, left out join{义Q都是允许符合条件的双表达式中的Entiies为空?

               
    // q回所有地址?000的OrderU录Q不Order中是否有OrderItem               
    final Query query = entityManager.createQuery( "select o from Order o
         left join o.orderItems where o.address.streetNumber=2000 order by o.id");
  
               
   

׃EJB3 QL默认采用left join。这L查询和以下的EJB3 QL其实是等L?

               
    // q回所有地址?000的OrderU录Q不Order中是否有OrderItem               
    final Query query = entityManager.createQuery( "select o from Order o
          where o.address.streetNumber=2000 order by o.id");
  
               
   

需要显式用left join/left outer join的情况会比较?

inner join要求双的表辑ּ必须q回Entities?

               
    // q回所有地址?000的OrderU录QOrder中必LOrderItem               
    final Query query = entityManager.createQuery( "select o from Order o
         inner join o.orderItems where o.address.streetNumber=2000 order by o.id");
  
               
   

left/left out/inner join fetch提供了一U灵zȝ查询加蝲方式来提高查询的性能。在默认的查询中QEntity中的集合属性默认不会被兌Q集合属性默认是~加? lazy-load )?

               
               
``` // 默认EJB3 QL~译后不兌集合属性变?orderItems)对应的表               
    final Query query = entityManager.createQuery( "select o from Order o
         inner join o.orderItems where o.address.streetNumber=2000 order by o.id");
    final List result = query.getResultList();
   
    // q时获得Order实体中orderItems( 集合属性变?)为空
    final Order order = (Order)result.get( 0 )
   
    // 当应用需要时QEJB3 Runtime才会执行一条SQL语句来加载属于当前Order的OrderItems
    Collection orderItems = order.getOrderItems();
  
               
   

q样的查询性能上有不的地斏Vؓ了查询N个OrderQ我们需要一条SQL语句获得所有的Order的原?对象属性, 但需要另外N条语句获得每个Order的orderItems集合属性。ؓ了避免N+1的性能问题Q我们可以利用join fetch一ơ过用一条SQL语句把Order的所有信息查询出来?

               
    // q回所有地址?000的OrderU录QOrder中必LOrderItem               
    final Query query = entityManager.createQuery( "select o from Order o
         inner join fetch o.orderItems where o.address.streetNumber=2000 order by o.id");
  
            
   

׃使用了fetch,q个查询只会产生一条SQL语句Q比原来需要N+1条SQL语句在性能上有了极大的提升?
比较Entity

在查询中使用参数查询Ӟ参数cd除了String, 原始数据cd( int, double{?和它们的对象cd( Integer, Double{?,也可以是Entity的实例?

               
    final Query query = entityManager.createQuery( "select o from Order o where o.address = ?1 order by o.id");
   
    final Address address = new Address( 2001, "foo street", "foo city", "foo province" );
   
    // 直接把address对象作ؓ参数?
    query.setParameter( 1, address );
 
            
   

扚w更新(Batch Update)

EJB3 QL支持扚w更新?

               
   Query query = managerNew.createQuery("update Order as o set o.vender=:newvender,  o.partNumber='fooPart' where o.vender = 'foo'");
   query.setParameter("newvender", "barVender");
  
   // update的记录数
   int result = query.executeUpdate();
           
   

扚w删除(Batch Remove)

EJB3 QL支持扚w删除?

               
    Query query = managerNew.createQuery("DELETE FROM Order");
    int result = query.executeUpdate();
               
    Query query = managerNew.createQuery("DELETE FROM Order AS o WHERE o.vender='redsoft'");
    int result = query.executeUpdate();           
   
   
   
   

使用操作WNOT

               
               
    // 查询所有vender不等?foo"的Order               
    Query query = managerNew.createQuery("SELECT FROM Order AS o WHERE not(o.vender='foo')");
    List result = query.getResultList();
               
    // 删除所有vender不等?foo"的Order
    Query query = managerNew.createQuery("DELETE FROM Order AS o WHERE not(o.vender='foo')");
    int result = query.executeUpdate();           
   

使用操作WBETWEEN

               
               
    // 查询所有h值amount在5?0之间?包含5,10)的Order              
    Query query = managerNew.createQuery("select o FROM Order AS o left join o.orderItems ot where o.amount BETWEEN 5 AND 10 order by o.vender desc");
    List result = query.getResultList();
        
   

使用操作WIN

               
    // 查询所有vender?foo1", "foo2"或?foo3"的Order               
    Query query = managerNew.createQuery("select o FROM Order AS o left join o.orderItems ot where o.vender in ( 'foo1', 'foo2', 'foo3' ) order by o.vender desc");
    List result = query.getResultList();
                       
        
   

使用操作WLIKE

               
    // 查询所有vender以字W串"foo"开头的Order               
    Query query = managerNew.createQuery("select o FROM Order as o where o.vender like 'foo%' order by o.vender desc");
    List result = query.getResultList();
   
   
    // 查询所有vender以字W串"foo"l尾的Order               
    Query query = managerNew.createQuery("select o FROM Order as o where o.vender like '%foo' order by o.vender desc");
    List result = query.getResultList();
   
   
    // 可以l合NOT一起用,比如查询所有vender不以以字W串"foo"l尾的Order               
    Query query = managerNew.createQuery("select o FROM Order as o where o.vender not like '%foo' order by o.vender desc");
    List result = query.getResultList();
   
    // 可以l合escape使用Q比如查询所有vender?foo"开始的Orderq忽?3'字符?
    // 如果vender?foo1", "foo2", "foo3"W合q个条g, 另外"3foo1", "f3oo4"也符合条件?
    Query query = managerNew.createQuery("select o FROM Order as o where o.vender like '%foo' escape '3' order by o.vender desc");
    List result = query.getResultList();
   
   
                       
        
   

使用操作WIS NULL

               
    // 查询所有没有地址的Order               
    Query query = managerNew.createQuery("select o FROM Order as o where o.address is null");
    List result = query.getResultList();
   
    // 查询所有地址非空的Order
    Query query = managerNew.createQuery("select o FROM Order as o where o.address is not null");
    List result = query.getResultList();
   
                       
        
   

使用操作WIS EMPTY

IS EMPTY是针寚w合属?Collection)的操作符。可以和NOT一起用?

               
    // 查询orderItems集合为空的Order               
    Query query = managerNew.createQuery("select o FROM Order o where o.orderItems is empty by o.vender desc");
    List result = query.getResultList();
   
   // 查询orderItems集合非空的Order               
    Query query = managerNew.createQuery("select o FROM Order o where o.orderItems is not empty by o.vender desc");
    List result = query.getResultList();                    
        
   

使用操作WEXISTS

[NOT]EXISTS需要和子查询配合用?

               
    Query query = manager.createQuery("select o FROM Order o where exists (select o from Order o where o.partNumber=?1) order by o.vender desc");
    query.setParameter(1, "partNumber");
   
   
    Query query = manager.createQuery("select o FROM Order o where o.vender='partNumber' and not exists (select o from Order o where o.partNumber=?1) order by o.vender desc");
    query.setParameter(1, "partNumber");
        
   

使用操作WALL/SOME/ANY

               
    Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > all ( select m.salary from Manager m where m.department = emp.department)");
    List result = query.getResultList();
   
    Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > any ( select m.salary from Manager m where m.department = emp.department)");
    List result = query.getResultList();
   
    Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > some ( select m.salary from Manager m where m.department = emp.department)");
    List result = query.getResultList();
        
   

字符串函?

EJB3 QL定义了内|函数方便用。这些函数的使用Ҏ和SQL中相应的函数ҎcM。EJB3 QL中定义的字符串函数包括:

    * CONCAT 字符串拼?
    * SUBSTRING 字符串截?
    * TRIM LI格
    * LOWER 转换成小?
    * UPPER 装换成大?
    * LENGTH 字符串长?
    * LOCATE 字符串定?

      
    // concat参C的两个字W串q结成一个字W串,q里firstName?foo", lastName?bar"
    Query query = entityManager.createQuery("select concat( o.owner.firstName, o.owner.lastName ) FROM Order AS o left outer join o.orderItems as oi where o.owner.firstName='foo'");
    List result = query.getResultList();
    assertEquals("foobar", result.get(0).toString());
       
    // firstName?fooBar",l果应该q回"oo"
    Query query = entityManager.createQuery("select o.vender,substring( o.owner.firstName, 1, 3 ), o.owner.info.age FROM Order AS o left outer join o.orderItems as oi where o.owner.firstName='charles'");
    List result = query.getResultList();
    Object[] row1 = (Object[]) result.get(0);
    assertEquals("oo", row1[1].toString());
   
    // 获得"ar"在firstName中地起始位置
    Query query = managerNew.createQuery("SELECT emp.firstName , emp.salary , locate( emp.firstName, 'ar') FROM EmployeeA as emp where emp.firstName='charles1111'");
    List result = query.getResultList();
       
        
   

计算函数

EJB3 QL中定义的计算函数包括Q?

    * ABS l对?
    * SQRT qx?
    * MOD 取余?
    * SIZE 取集合的数量

      
    Query query = entityManager.createQuery("select o.vender, size( o.orderItems ) FROM Order o  where o.owner.firstName = 'charles' group by o.vender order by o.vender desc");
    List result = query.getResultList();
   
    // 函数也可以用在条件中
    Query query = managerNew.createQuery("select o.vender, sum(o.amount) FROM Order AS o left join o.orderItems ot group by o.vender having size(o.orderItems) = 0 or lower( o.vender ) = 'foo' order by o.vender desc");
    List result = query.getResultList();

   
    // 取余?
    Query query = managerNew.createQuery("select mod( o.owner.info.age, 10 ) FROM Order o where exists ( select o from Order o where o.partNumber= :name ) and o.vender='order1' and exists ( select o from Order o where o.amount= :name1 ) order by o.vender desc");
       
        
   

子查?

子查询可以用于WHERE和HAVING条g语句中?

      
    Query query = managerNew.createQuery("select emp from EmployeeA as emp where ( select count(m) from Manager as m where m.department = emp.department) > 0 ");
    List result = query.getResultList();  


大鱼 2009-10-20 09:09 发表评论
]]>
EJB调用存储q程http://www.aygfsteel.com/luluyanglu/archive/2009/09/24/296318.html大鱼大鱼Thu, 24 Sep 2009 09:28:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/09/24/296318.htmlhttp://www.aygfsteel.com/luluyanglu/comments/296318.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/09/24/296318.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/296318.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/296318.htmlEJB调用存储q程
    
要调用存储过E,我们可以通过EntityManager 对象的createNativeQuery()Ҏ执行SQL 语句(注意Q这里说的是SQL 语句Q不是EJB3 QL), 调用存储q程的SQL 格式如下Q?br />      {call 存储q程名称(参数1, 参数2, … )}
     在EJB3 中你可以调用的存储过E有两种
     1Q无q回值的存储q程?/font>
     2Q返回gؓResultSetQ以select 形式q回的|的存储过E,EJB3 不能调用以OUT 参数q回值的存储q程

1.调用无返回值的存储q程
   //调用无返回参数的存储q程
   Query query = em.createNativeQuery("{call Procedure()}");
   query.executeUpdate();

2.调用q回单值的存储q程
   //调用q回单个值的存储q程
   Query query = em.createNativeQuery("{call GetPersonName(?)}");
   query.setParameter(1, new Integer(1));
   String result = query.getSingleResult().toString();

3.调用q回表全部列的存储过E?br />    在调用存储过E时,可以让EJB3 Persistence q行环境列值直接填充入一个Entity 的实例(本例填充qPerson 对象Q,q将实例作ؓl果q回
   //调用q回Person 全部列的存储q程
   Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
   List result = query.getResultList();
存储q程
GetPersonList:
   CREATE PROCEDURE `GetPersonList`()
   NOT DETERMINISTIC
           SQL SECURITY DEFINER
           COMMENT ''
    BEGIN
              select * from person;
    END;


4.调用q回部分列的存储q程
   创徏存储q程:
   CREATE PROCEDURE `GetPersonPartProperties`()
                  NOT DETERMINISTICSQL SECURITY DEFINER
                  COMMENT ''
   BEGIN
                  SELECT personid, personname from person;
   END;

   //调用q回部分列的存储q程
   Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
   List result = query.getResultList();


大鱼 2009-09-24 17:28 发表评论
]]>
EJB3常见异常及解?/title><link>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260118.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Mon, 16 Mar 2009 14:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260118.html</guid><wfw:comment>http://www.aygfsteel.com/luluyanglu/comments/260118.html</wfw:comment><comments>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/luluyanglu/comments/commentRss/260118.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/luluyanglu/services/trackbacks/260118.html</trackback:ping><description><![CDATA[<p>~少StandAlone的三个Jar?/p> <p>customer Bill Burker<br /> Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/jboss/invocation/Invoker;<br />  at java.lang.Class.getDeclaredFields0(Native Method)<br />  at java.lang.Class.privateGetDeclaredFields(Unknown Source)<br />  at java.lang.Class.getDeclaredField(Unknown Source)<br />  at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source)<br />  at java.io.ObjectStreamClass.access$700(Unknown Source)<br />  at java.io.ObjectStreamClass$2.run(Unknown Source)<br />  at java.security.AccessController.doPrivileged(Native Method)<br />  at java.io.ObjectStreamClass.<init>(Unknown Source)<br />  at java.io.ObjectStreamClass.lookup(Unknown Source)<br />  at java.io.ObjectStreamClass.initNonProxy(Unknown Source)<br />  at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)<br />  at java.io.ObjectInputStream.readClassDesc(Unknown Source)<br />  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br />  at java.io.ObjectInputStream.readObject0(Unknown Source)<br />  at java.io.ObjectInputStream.defaultReadFields(Unknown Source)<br />  at java.io.ObjectInputStream.readSerialData(Unknown Source)<br />  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br />  at java.io.ObjectInputStream.readObject0(Unknown Source)<br />  at java.io.ObjectInputStream.defaultReadFields(Unknown Source)<br />  at java.io.ObjectInputStream.readSerialData(Unknown Source)<br />  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br />  at java.io.ObjectInputStream.readObject0(Unknown Source)<br />  at java.io.ObjectInputStream.readObject(Unknown Source)<br />  at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:107)<br />  at java.io.ObjectInputStream.readExternalData(Unknown Source)<br />  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br />  at java.io.ObjectInputStream.readObject0(Unknown Source)<br />  at java.io.ObjectInputStream.defaultReadFields(Unknown Source)<br />  at java.io.ObjectInputStream.readSerialData(Unknown Source)<br />  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br />  at java.io.ObjectInputStream.readObject0(Unknown Source)<br />  at java.io.ObjectInputStream.readObject(Unknown Source)<br />  at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)<br />  at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)<br />  at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)<br />  at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)<br />  at org.jboss.remoting.Client.invoke(Client.java:525)<br />  at org.jboss.remoting.Client.invoke(Client.java:488)<br />  at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:41)<br />  at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)<br />  at org.jboss.aspects.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:34)<br />  at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)<br />  at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:46)<br />  at $Proxy1.createProxy(Unknown Source)<br />  at org.jboss.ejb3.JndiProxyFactory.getObjectInstance(JndiProxyFactory.java:52)<br />  at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)<br />  at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1125)<br />  at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1142)<br />  at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:705)<br />  at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)<br />  at javax.naming.InitialContext.lookup(Unknown Source)<br />  at com.lyh.ejb3.clients.TravelAgentShell.getAgent(TravelAgentShell.java:46)<br />  at com.lyh.ejb3.clients.TravelAgentShell.customer(TravelAgentShell.java:156)<br />  at com.lyh.ejb3.clients.TravelAgentShell.processCommand(TravelAgentShell.java:115)<br />  at com.lyh.ejb3.clients.TravelAgentShell.shell(TravelAgentShell.java:83)<br />  at com.lyh.ejb3.clients.TravelAgentShell.main(TravelAgentShell.java:36)</p> <p> </p> <p><br /> Hibernate EntityManager 文档描述如下:<br /> If no persistence.xml with the correct<br /> name are found or if the expected persistence provider is not found, a PersistenceException is raised.</p> <p>数据库没有启动时会出现如下异?persistence.xml配置错误也会出现,如帐P密码错误<br /> Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set<br />  at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:217)<br />  at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:114)<br />  at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)<br />  at com.titan.clients.StandaloneClient.main(StandaloneClient.java:16)<br /> Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set<br />  at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)<br />  at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)<br />  at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:397)<br />  at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)<br />  at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1928)<br />  at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)<br />  at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:631)<br />  at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:760)<br />  at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:151)<br />  at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:205)<br />  ... 3 more<br /> 加入JBOSS的jboss-EJB-3.0_Embeddable_ALPHA_8中的jar包即?br /> Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named titan<br />  at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:41)<br />  at com.lyh.ejb3.clients.StandaloneClient.main(StandaloneClient.java:21)</p> <p> </p> <p><br />  在数据库中插入字D,q抛出异?br />  public Integer getId() {<br />   return this.id;<br />  }<br />  @Id<br />  @GeneratedValue(strategy=GenerationType.AUTO)<br />  public void setId(Integer id) {<br />   this.id = id;<br />  }</p> <p><br /> 文章出处QDIY部落(http://www.diybl.com/course/1_web/webjs/20071021/79030_6.html)</p> <img src ="http://www.aygfsteel.com/luluyanglu/aggbug/260118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/luluyanglu/" target="_blank">大鱼</a> 2009-03-16 22:22 <a href="http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260117.html大鱼大鱼Mon, 16 Mar 2009 14:21:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260117.htmlhttp://www.aygfsteel.com/luluyanglu/comments/260117.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260117.html#Feedback1http://www.aygfsteel.com/luluyanglu/comments/commentRss/260117.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/260117.html

org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]

错误解决Ҏ

 

        q日在运行一个EJB3 Entity实例Q一对多关系Q时总遇到如下异常,久试不能修复?/font>

javax.persistence.PersistenceException: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]
 at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720)
 at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127)
 at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:246)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.ejb3.ServiceDelegateWrapper.startService(ServiceDelegateWrapper.java:103)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
 at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
 at $Proxy0.start(Unknown Source)
 at org.jboss.system.ServiceController.start(ServiceController.java:417)
 at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy69.start(Unknown Source)
 at org.jboss.ejb3.JmxKernelAbstraction.install(JmxKernelAbstraction.java:120)
 at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3Deployment.java:627)
 at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:351)
 at org.jboss.ejb3.Ejb3Module.startService(Ejb3Module.java:91)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
 at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
 at $Proxy0.start(Unknown Source)
 at org.jboss.system.ServiceController.start(ServiceController.java:417)
 at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy33.start(Unknown Source)
 at org.jboss.ejb3.EJB3Deployer.start(EJB3Deployer.java:512)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
 at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
 at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
 at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)
 at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
 at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy34.start(Unknown Source)
 at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
 at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
 at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
 at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy9.deploy(Unknown Source)
 at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
 at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
 at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
 at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
 at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]
 at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
 at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
 at org.hibernate.mapping.Property.isValid(Property.java:185)
 at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
 at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
 at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
 at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:713)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

        通过google查找问题原因时发现是Hibenate的一个bugQ外文网站上是这么说的,我ƈ不认为是Hibernate的原因)。需要把

     @Id
     @Column(name = "ID")

        写到public int getId() {return this.id; }Ҏ的上面。不能像书中例子那样写在private int id;的上面?/font>



大鱼 2009-03-16 22:21 发表评论
]]>
EJB异常QCannot instantiate class:org.jnp.interfaces.NamingContextFactory http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260116.html大鱼大鱼Mon, 16 Mar 2009 14:19:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260116.htmlhttp://www.aygfsteel.com/luluyanglu/comments/260116.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260116.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/260116.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/260116.htmlEJB异常QCannot instantiate class:org.jnp.interfaces.NamingContextFactory

 

 

如出C下异常:

Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]

 

h看是否将JBOSS_Home下client文g夹中的所有jar包都导入C目工程中?/span>



大鱼 2009-03-16 22:19 发表评论
]]>
EJB异常QCollection has neither generic type or OneToMany.targetEntity() defined:http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260114.html大鱼大鱼Mon, 16 Mar 2009 14:19:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260114.htmlhttp://www.aygfsteel.com/luluyanglu/comments/260114.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260114.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/260114.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/260114.htmlEJB异常QCollection has neither generic type or OneToMany.targetEntity() defined:

如出现类g下异常:

 

org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: org.svse.org.model.Order.orderItems

 

h查orderItemsq个属性是否用了泛型,?Set<OrderItem>.

如果未用泛?请在OneToMany注释中用targetEntity指定元素的类?/span>



大鱼 2009-03-16 22:19 发表评论
]]>
EJB3.xQ部|?卸蝲)EntityBean时自动创?删除)表结?/title><link>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260113.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Mon, 16 Mar 2009 14:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260113.html</guid><wfw:comment>http://www.aygfsteel.com/luluyanglu/comments/260113.html</wfw:comment><comments>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/luluyanglu/comments/commentRss/260113.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/luluyanglu/services/trackbacks/260113.html</trackback:ping><description><![CDATA[EJB3.xQ部|?卸蝲)EntityBean时自动创?删除)表结?cite class="fav_csdnstylebykimi"><a class="fav_csdnstylebykimi" title="收藏到我的网摘中Qƈ分nl我的朋? href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</a></cite> <div id="wmqeeuq" class="blogstory"><script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script> <p style="text-align: center"><span style="font-size: medium"><strong> EJB3.xQ部|?卸蝲)EntityBean时自动创?删除)表结?/strong></span></p> <p style="text-align: left"><span style="font-size: small"><strong><span style="color: #008000">persistence.xml</span></strong></span></p> <p style="text-align: left"><span style="font-size: medium"><strong></strong></span></p> <p style="text-align: left"><span style="font-size: medium"><strong></strong></span> <div id="wmqeeuq" class="dp-highlighter"> <div id="wmqeeuq" class="bar"> <div id="wmqeeuq" class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" >view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" >copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" >print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" >?</a></div> </div> <ol class="dp-xml"> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="tag"><?</span><span id="wmqeeuq" class="tag-name">xml</span><span> </span><span id="wmqeeuq" class="attribute">version</span><span>=</span><span id="wmqeeuq" class="attribute-value">"1.0"</span><span id="wmqeeuq" class="tag">?></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">persistence</span><span> </span><span id="wmqeeuq" class="attribute">xmlns</span><span>=</span><span id="wmqeeuq" class="attribute-value">"http://java.sun.com/xml/ns/persistence"</span><span> </span><span id="wmqeeuq" class="attribute">xmlns:xsi</span><span>=</span><span id="wmqeeuq" class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="attribute">xsi:schemaLocation</span><span>=</span><span id="wmqeeuq" class="attribute-value">"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"</span><span> </span><span id="wmqeeuq" class="attribute">version</span><span>=</span><span id="wmqeeuq" class="attribute-value">"1.0"</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>  </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">persistence-unit</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"EJBBookStore"</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">jta-data-source</span><span id="wmqeeuq" class="tag">></span><span>java:/MSSQLDS</span><span id="wmqeeuq" class="tag"></</span><span id="wmqeeuq" class="tag-name">jta-data-source</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">properties</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>     </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">property</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"hibernate.hbm2ddl.auto"</span><span> </span><span id="wmqeeuq" class="attribute">value</span><span>=</span><span id="wmqeeuq" class="attribute-value">"none"</span><span id="wmqeeuq" class="tag">/></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>     </span><span id="wmqeeuq" class="comments"><!-- 调整JDBC抓取数量的大? Statement.setFetchSize() --></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>     </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">property</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"hibernate.jdbc.fetch_size"</span><span> </span><span id="wmqeeuq" class="attribute">value</span><span>=</span><span id="wmqeeuq" class="attribute-value">"18"</span><span id="wmqeeuq" class="tag">/></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>     </span><span id="wmqeeuq" class="comments"><!-- 调整JDBC扚w更新数量 --></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>     </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">property</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"hibernate.jdbc.batch_size"</span><span> </span><span id="wmqeeuq" class="attribute">value</span><span>=</span><span id="wmqeeuq" class="attribute-value">"10"</span><span id="wmqeeuq" class="tag">/></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>     </span><span id="wmqeeuq" class="comments"><!-- 昄最l执行的SQL --></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>     </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">property</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"hibernate.show_sql"</span><span> </span><span id="wmqeeuq" class="attribute">value</span><span>=</span><span id="wmqeeuq" class="attribute-value">"true"</span><span id="wmqeeuq" class="tag">/></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>     </span><span id="wmqeeuq" class="comments"><!-- 格式化显C的SQL --></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>     </span><span id="wmqeeuq" class="tag"><</span><span id="wmqeeuq" class="tag-name">property</span><span> </span><span id="wmqeeuq" class="attribute">name</span><span>=</span><span id="wmqeeuq" class="attribute-value">"hibernate.format_sql"</span><span> </span><span id="wmqeeuq" class="attribute">value</span><span>=</span><span id="wmqeeuq" class="attribute-value">"true"</span><span id="wmqeeuq" class="tag">/></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="tag"></</span><span id="wmqeeuq" class="tag-name">properties</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>  </span><span id="wmqeeuq" class="tag"></</span><span id="wmqeeuq" class="tag-name">persistence-unit</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="tag"></</span><span id="wmqeeuq" class="tag-name">persistence</span><span id="wmqeeuq" class="tag">></span><span>  </span></span></li> </ol> </div> <textarea class="xhtml" style="display: none" name="code" rows="15" cols="77"><?xml version="1.0"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="EJBBookStore"> <jta-data-source>java:/MSSQLDS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="none"/> <!-- 调整JDBC抓取数量的大? Statement.setFetchSize() --> <property name="hibernate.jdbc.fetch_size" value="18"/> <!-- 调整JDBC扚w更新数量 --> <property name="hibernate.jdbc.batch_size" value="10"/> <!-- 昄最l执行的SQL --> <property name="hibernate.show_sql" value="true"/> <!-- 格式化显C的SQL --> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence> </textarea>   <p> </p> <p style="text-align: left"><span style="font-size: medium"><span style="font-size: small"><span style="color: #0000ff">properties 节点用作指定Hibernate的各属性,如果hibernate.hbm2ddl.auto的D为create-dropQ在实体Bean发布及卸载时自动创建及删除相应数据库表(注意QJboss服务器启动或关闭时会引发实体Bean的发布及卸蝲)?/span></span></span></p> <p><span style="font-size: small"><span style="color: #0000ff">如果你的表已l存?q且想保留数据,发布实体bean时可以把hibernate.hbm2ddl.auto的D为none或update,以后Z实体bean 的改动能反应到数据表Q徏议用updateQ这样实体Beand一个属性时能同时在数据表增加相应字Dc?/span></span></p> </div> <img src ="http://www.aygfsteel.com/luluyanglu/aggbug/260113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/luluyanglu/" target="_blank">大鱼</a> 2009-03-16 22:18 <a href="http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB异常Qidentifier of an instance of net.model.entity.Role was altered from 2 to 0http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260111.html大鱼大鱼Mon, 16 Mar 2009 14:17:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260111.htmlhttp://www.aygfsteel.com/luluyanglu/comments/260111.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260111.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/260111.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/260111.htmlEJB异常Qidentifier of an instance of net.model.entity.Role was altered from 2 to 0

 

如出现类g下异常:

 

 21:23:05,106 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@473201
javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of net.model.entity.Role was altered from 2 to 0
 at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
 at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:513)
 at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:101)
 at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:263)
 at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
 at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
 at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1414)
 at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
 at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
 at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:170)
 at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
 at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:159)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:65)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
 at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:486)
 at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:56)
 at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
 at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
 at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:908)
 at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:742)
 at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:695)
 at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:522)
 at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:230)
Caused by: org.hibernate.HibernateException: identifier of an instance of net.model.entity.Role was altered from 2 to 0
 at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:81)
 at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187)
 at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
 at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
 at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
 at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
 at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
 ... 34 more

h查Rolecȝ主键属性是否是装cd。例如:IntegerQLong ……。不能是intQlong{数据类型?/span>



大鱼 2009-03-16 22:17 发表评论
]]>
EJB3.xQ关于@UniqueConstraint标记中的columnNames属?/title><link>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260110.html</link><dc:creator>大鱼</dc:creator><author>大鱼</author><pubDate>Mon, 16 Mar 2009 14:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260110.html</guid><wfw:comment>http://www.aygfsteel.com/luluyanglu/comments/260110.html</wfw:comment><comments>http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/luluyanglu/comments/commentRss/260110.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/luluyanglu/services/trackbacks/260110.html</trackback:ping><description><![CDATA[<p style="text-align: center"><strong><span style="font-size: large">EJB3.xQ关于@UniqueConstraint标记中的columnNames属?/span></strong></p> <p style="text-align: left"><span style="font-size: small">例如以下代码Q?/span></p> <p style="text-align: left"> <div id="wmqeeuq" class="dp-highlighter"> <div id="wmqeeuq" class="bar"> <div id="wmqeeuq" class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" >view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" >copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" >print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" >?</a></div> </div> <ol class="dp-j"> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="keyword">package</span><span> net.model.entity;   </span></span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.Serializable;   </span></span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.Column;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.Entity;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.GeneratedValue;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.GenerationType;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.Id;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.Table;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> javax.persistence.UniqueConstraint;   </span></span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="annotation">@Entity</span><span>  </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="annotation">@Table</span><span>(   </span></span></li> <li id="wmqeeuq" class="alt"><span>        name=</span><span id="wmqeeuq" class="string">"ROLE"</span><span> ,   </span></span></li> <li id="wmqeeuq" class=""><span>        uniqueConstraints={</span><span id="wmqeeuq" class="annotation">@UniqueConstraint</span><span>(columnNames={</span><span id="wmqeeuq" class="string">"ROLE_NAME"</span><span>})}                   </span></span></li> <li id="wmqeeuq" class="alt"><span>)   </span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">class</span><span> Role </span><span id="wmqeeuq" class="keyword">implements</span><span> Serializable   </span></span></li> <li id="wmqeeuq" class="alt"><span>{   </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> Integer id ;   </span></span></li> <li id="wmqeeuq" class="alt"><span>       </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> String roleName;   </span></span></li> <li id="wmqeeuq" class="alt"><span>       </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> </span><span id="wmqeeuq" class="keyword">int</span><span> roleValue ;   </span></span></li> <li id="wmqeeuq" class="alt"><span>       </span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span>  </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="annotation">@Id</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="annotation">@GeneratedValue</span><span>(strategy=GenerationType.AUTO)   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="annotation">@Column</span><span>(name=</span><span id="wmqeeuq" class="string">"ROLE_ID"</span><span>)   </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> Integer getId() {   </span></span></li> <li id="wmqeeuq" class=""><span>        </span><span id="wmqeeuq" class="keyword">return</span><span> id;   </span></span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> setId(Integer id) {   </span></span></li> <li id="wmqeeuq" class=""><span>        </span><span id="wmqeeuq" class="keyword">this</span><span>.id = id;   </span></span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span>       </span></li> <li id="wmqeeuq" class=""><span>       </span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="annotation">@Column</span><span>(name=</span><span id="wmqeeuq" class="string">"ROLE_NAME"</span><span> , nullable=</span><span id="wmqeeuq" class="keyword">false</span><span> ,length=</span><span id="wmqeeuq" class="number">50</span><span>)   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> String getRoleName() {   </span></span></li> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">return</span><span> roleName;   </span></span></li> <li id="wmqeeuq" class=""><span>    }   </span></li> <li id="wmqeeuq" class="alt"><span>  </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> setRoleName(String roleName) {   </span></span></li> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">this</span><span>.roleName = roleName;   </span></span></li> <li id="wmqeeuq" class=""><span>    }   </span></li> <li id="wmqeeuq" class="alt"><span>  </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="annotation">@Column</span><span>(name=</span><span id="wmqeeuq" class="string">"ROLE_VALUE"</span><span> , nullable=</span><span id="wmqeeuq" class="keyword">false</span><span>)   </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">int</span><span> getRoleValue() {   </span></span></li> <li id="wmqeeuq" class=""><span>        </span><span id="wmqeeuq" class="keyword">return</span><span> roleValue;   </span></span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> setRoleValue(</span><span id="wmqeeuq" class="keyword">int</span><span> roleValue) {   </span></span></li> <li id="wmqeeuq" class=""><span>        </span><span id="wmqeeuq" class="keyword">this</span><span>.roleValue = roleValue;   </span></span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>  </span></li> <li id="wmqeeuq" class="alt"><span>}  </span></li> </ol> </div> <textarea class="java" style="display: none" name="code" rows="15" cols="78">package net.model.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.UniqueConstraint; @Entity @Table( name="ROLE" , uniqueConstraints={@UniqueConstraint(columnNames={"ROLE_NAME"})} ) public class Role implements Serializable { private Integer id ; private String roleName; private int roleValue ; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="ROLE_ID") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="ROLE_NAME" , nullable=false ,length=50) public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } @Column(name="ROLE_VALUE" , nullable=false) public int getRoleValue() { return roleValue; } public void setRoleValue(int roleValue) { this.roleValue = roleValue; } }</textarea>   <p> </p> <p style="text-align: left"> </p> <p style="text-align: left"><span style="color: #0000ff"><span style="font-size: small">注意uniqueConstraints={@UniqueConstraint(columnNames={"ROLE_NAME"})} 中的<span style="color: #0000ff">columnNames属性gؓ数据库表中的<strong><span style="color: #ff0000"><span style="font-size: medium">字段?/span></span></strong>Q而不是RolecM的类成员名roleName?/span></span></span></p> <img src ="http://www.aygfsteel.com/luluyanglu/aggbug/260110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/luluyanglu/" target="_blank">大鱼</a> 2009-03-16 22:16 <a href="http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3.x: 关于@UniqueConstraint标记无效问题http://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260107.html大鱼大鱼Mon, 16 Mar 2009 14:13:00 GMThttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260107.htmlhttp://www.aygfsteel.com/luluyanglu/comments/260107.htmlhttp://www.aygfsteel.com/luluyanglu/archive/2009/03/16/260107.html#Feedback0http://www.aygfsteel.com/luluyanglu/comments/commentRss/260107.htmlhttp://www.aygfsteel.com/luluyanglu/services/trackbacks/260107.htmlEJB3.x: 关于@UniqueConstraint标记无效问题

在制定Entity BeanӞ讄了该实体的@UniqueConstraint限制。但是对该实体Beanq行部v后,q没有在数据库表中看到对应表字段出现unique限制。这是因为@UniqueConstraint标记必须在自动生成表的情况下才v作用。即Q在persistence.xml中将hibernate.hbm2ddl.auto讄为create-drop。否则,唯一性约束限制不会被加入到数据库中?/span>

以下是《JSR 220: Enterprise JavaBeansTM,Version 3.0 Java Persistence API》文档的原文说明Q?/span>

Type

Name

Description

Default

UniqueConstraint[]

uniqueConstraints

(Optional) Unique constraints that are to be placed on the table. These are only used if table generation is in effect. These constraints apply in addition to any constraints specified by the Column and JoinColumn annotations and constraints entailed by primary key mappings.

No additional

constraints



大鱼 2009-03-16 22:13 发表评论
]]>
վ֩ģ壺 ̶| | | ʡ| | | | | ֶ| | | | ˺| Ϫ| | Ͳ| | ͭ| ߶| | ͷ| Ȫ| | | ̩| | ƽ| ½| | ³ƶ| | | | | ϳ| ƺ| | ɽ| ػʵ| Ƽ| ͨ|