www.91084.com

GVKun编程网logo

An association from the table PersonAddress refers to an unmapped class

23

针对AnassociationfromthetablePersonAddressreferstoanunmappedclass这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABAPonHAN

针对An association from the table PersonAddress refers to an unmapped class这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ABAP on HANA之CDS Association和Path Expression、An association from the table content refers to an、Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion、Android java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion等相关知识,希望可以帮助到你。

本文目录一览:

An association from the table PersonAddress refers to an unmapped class

An association from the table PersonAddress refers to an unmapped class

cjq\hibernate\tutorial\domain01\Person.hbm.xml 文件内容为:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cjq.hibernate.tutorial.domain01">
 <class name="Person">
  <id name="id" column="personId">
   <generator/>
  </id>
  <join table="PersonAddress" optional="true">
   <key column="personId" />
   <many-to-one name="address" column="addressId" not-null="true"/>
  </join>
 </class>
 
 <class name="Address">
  <id name="id" column="addressId">
   <generator/>
  </id>
 </class>

</hibernate-mapping>

Person.java

package cjq.hibernate.tutorial.domain01;

import java.util.HashSet;
import java.util.Set;

public class Person {
 int id;
 int address ;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public int getAddress() {
  return address;
 }
 public void setAddress(int address) {
  this.address = address;
 }
}

Address.java
package cjq.hibernate.tutorial.domain01;

public class Address {
 int id;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }
 

}

MyTest.java

package cjq.hibernate.tutorial.domain01;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;

import cjq.hibernate.tutorial.util.HibernateUtil;

public class MyTest {
 public static void main(String [] args){
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();
  Address a = new Address();
  session.save(a);
  Address b = new Address();
  session.save(b);  
  Person p1 = new Person();  
  p1.setAddress(a.getId());
  session.save(p1);
  Person p2 = new Person();
  p2.setAddress(a.getId());
  session.save(p2);
  session.getTransaction().commit();
  HibernateUtil.getSessionFactory().close();
 }

}


运行 MyTest.java
此时报错:
Initial SessionFactory creation failed.org.hibernate.MappingException: An association from the table PersonAddress refers to an unmapped class: int
Exception in thread "main" java.lang.ExceptionInInitializerError
 at cjq.hibernate.tutorial.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:27)
 at cjq.hibernate.tutorial.util.HibernateUtil.<clinit>(HibernateUtil.java:15)
 at cjq.hibernate.tutorial.domain01.MyTest.main(MyTest.java:12)
Caused by: org.hibernate.MappingException: An association from the table PersonAddress refers to an unmapped class: int
 at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1697)
 at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1631)
 at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1366)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1731)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1782)
 at cjq.hibernate.tutorial.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:23)
 ... 2 more


分析后,Person.java 中,address 的类型不应该为 int, 而应该为 Address 类型
修改后的 Person.java 为:
package cjq.hibernate.tutorial.domain01;

import java.util.HashSet;
import java.util.Set;

public class Person {
 int id;
 Address address ;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public Address getAddress() {
  return address;
 }
 public void setAddress(Address address) {
  this.address = address;
 }
}


同时,MyTest.java 的内容做相应修改:
package cjq.hibernate.tutorial.domain01;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;

import cjq.hibernate.tutorial.util.HibernateUtil;

public class MyTest {
 public static void main(String [] args){
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();  
  session.beginTransaction();  
  Address a = new Address();  
  session.save(a);  
  Address b = new Address();
  session.save(b);  
  Person p1 = new Person();
  p1.setAddress(a);
  session.save(p1);
  Person p2 = new Person();
  p2.setAddress(a);
  session.save(p2);
  session.getTransaction().commit();
  HibernateUtil.getSessionFactory().close();
 }

}

此时,再运行 MyTest.java
输出的错误信息为:
ERROR: HHH000388: Unsuccessful: create table PersonAddress (personId number(10,0) not null unique, addressId number(10,0) not null, primary key (personId))
八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: ORA-02261: 表中已存在这样的唯一关键字或主键

八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000388: Unsuccessful: alter table PersonAddress add constraint FKA81B4EBF9A4AE9FE foreign key (personId) references Person
八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: ORA-00942: 表或视图不存在

八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000388: Unsuccessful: alter table PersonAddress add constraint FKA81B4EBF945FDFAA foreign key (addressId) references Address
八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: ORA-00942: 表或视图不存在

八月 25, 2012 11:10:25 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into Address (addressId) values (?)
Hibernate: insert into Address (addressId) values (?)
Hibernate: insert into Person (personId) values (?)
Hibernate: insert into PersonAddress (addressId, personId) values (?, ?)
八月 25, 2012 11:10:26 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 942, SQLState: 42000
八月 25, 2012 11:10:26 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-00942: 表或视图不存在

Exception in thread "main" org.hibernate.exception.SQLGrammarException: ORA-00942: 表或视图不存在

 at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
 at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
 at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
 at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
 at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
 at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
 at $Proxy6.executeUpdate(Unknown Source)
 at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2862)
 at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3300)
 at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88)
 at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
 at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
 at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:275)
 at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
 at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
 at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1214)
 at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:403)
 at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
 at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
 at cjq.hibernate.tutorial.domain01.MyTest.main(MyTest.java:36)
Caused by: java.sql.SQLException: ORA-00942: 表或视图不存在

 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
 at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
 at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
 at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
 at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
 at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3423)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:601)
 at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
 ... 15 more


注意到:create table PersonAddress (personId number (10,0) not null unique, addressId number (10,0) not null, primary key (personId)) 这个建表语句,primary key 与 not null unique 是重复的。

查看 Person.hbm.xml,发现:
<join table="PersonAddress" optional="true">
   <key column="personId" unique="true"/>
   <many-to-one name="address" column="addressId" not-null="true"/>
  </join>

此处的 unique="true" 应该去掉:
<join table="PersonAddress" optional="true">
   <key column="personId" />
   <many-to-one name="address" column="addressId" not-null="true"/>
  </join>

这样再次运行 MyTest.java
就正确了。

ABAP on HANA之CDS Association和Path Expression

ABAP on HANA之CDS Association和Path Expression

 

本文阐述了ABAP CDS association的概念,并且展示了在CDS视图中和SQL语句中写路径表达式(Path Expression)代码的方法。我也会解释如何在CDS asociation中指定inner join——默认情况下是left outer join,以及如何为association添加过滤。

 

对于CDS的相关开发,SAP希望我们使用association而不是join,因为association更加接近“概念思维”。基本上,association本身不是join,它只是有关join连接可能性的元数据,它会按需成为join。真实的join会在路径表达式使用association的时候被创建。

 一个简单的CDS association例子,它看起来和left outer join没区别:

@AbapCatalog.sqlViewName: ''ZCDS_ASSOC11''
define view zcds_assoc1 as select from scarr as sca
   association [0..1] to spfli as _spfli 
   on sca.carrid = _spfli.carrid   
   { * }

 

暴露CDS association的例子:

@AbapCatalog.sqlViewName: ''ZCDS_ASSOC41''
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc4 as select from sairport as sair
    association [1..*] to spfli as _spfli on
        $projection.airportfrom = _spfli.airpfrom
    {     
       sair.id as airportfrom,
       sair.name,
       sair.time_zone,
      -- exposing association
      _spfli
    }

 

在下面的例子里,你可以看到SPFLI表对SFLIGHT表和SAIRPORT表的association。通过别名alias _sfli和SFLIGHT和_sair,SAIRPORT的全部字段暴露在projection列表中。当路径表达式用于调用association时,会根据选择字段创建join条件:spfli.carrid = sflight.carrid and spfli.connid = sflight.connid and on spfli.airport = sairport.id。

@AbapCatalog.sqlViewName: ''ZCDS_ASSOC21''
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc2 as select from spfli 
   association to sflight as _sfli on 
        spfli.carrid = _sfli.carrid and
        spfli.connid = _sfli.connid
    association [1..1] to sairport as _sair on
        $projection.airportfrom = _sair.id
    {
      spfli.carrid,
      spfli.connid,
      spfli.airpfrom as airportfrom,
      -- exposing association
      _sfli,
      _sair    
    }

 

在下面的例子里,定义association时使用了上面的CDS entity,ZCDS_ASSOC2 :

@AbapCatalog.sqlViewName: ''ZCDS_ASSOC31''
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc3 as select from scarr
        association [1..1] to zcds_assoc2  as _cdsassoc on
         $projection.carrierid = _cdsassoc.carrid
      {
         scarr.carrid as carrierid,
     -- Exposing Association    
         _cdsassoc
      } 

 

Open SQL语句中的路径表达式:在SQL语句中调用CDS association,需要使用如下的路径表达式。在上面的CDS association中,通过_cdsassoc暴露了完整的projection列表。

DATA(w_dbfeature) = cl_abap_dbfeatures=>use_features( 
 requested_features = VALUE #( ( cl_abap_dbfeatures=>views_with_parameters ) ) ). IF w_dbfeature IS NOT INITIAL. SELECT carrierid , \_cdsassoc\_sfli-fldate AS flightdate, \_cdsassoc\_sair-name AS flightname FROM zcds_assoc3 WHERE carrierid = @carrid INTO TABLE @DATA(t_data1). ENDIF.

 

CDS视图中的路径表达式:

@AbapCatalog.sqlViewName: ''ZCDS_ON_ASSOC1''
define view zcds_on_assoc with parameters airport: S_FROMAIRP  as select from zcds_assoc2 as cds2
    {
      cds2.carrid,
      cds2.connid,
      cds2.airportfrom,    
      cds2._sair.name, -- use inner join...by default association uses left outer join
      cds2._sfli.planetype
    }
 where cds2.airportfrom = :airport

 

如我所提到的那样,在被路径表达式调用时,CDS association会默认创建left outer join。

在SPFLI表数据中,没有RTM机场的航班。

 

当我们输入参数airport = RTM的时候 ,下面的CDS视图的查询结果会是一条RTM机场的数据,但是这条记录里没有carrid。

@AbapCatalog.sqlViewName: ''ZCDS_ON_ASSOC41''
define view zcds_on_assoc4 with parameters airport: S_FROMAIRP as select from zcds_assoc4 as cds_assoc
    {
      cds_assoc.airportfrom,
      cds_assoc.name,
      cds_assoc.time_zone,    
      cds_assoc._spfli.carrid -- use inner join...by default association uses left outer join
    }
 where cds_assoc.airportfrom = :airport

 

运行上面的CDS视图:

 

data preview中的结果:

 

为了把默认的left outer join变成inner join,我们需要使用[inner],如下:

@AbapCatalog.sqlViewName: ''ZCDS_ON_ASSOC41''
define view zcds_on_assoc4 with parameters airport: S_FROMAIRP as select from zcds_assoc4 as cds_assoc
    {
      cds_assoc.airportfrom,
      cds_assoc.name,
      cds_assoc.time_zone,    
      cds_assoc._spfli[inner].carrid -- use inner join...by default association uses left outer join
    }
 where cds_assoc.airportfrom = :airport

 

如果运行它,输入参数RTM,得到的结果为空:

 

目前,还不可以在CDS association中使用right outer join。

CDS association中的过滤例子如下:

@AbapCatalog.sqlViewName: ''ZCDS_ASSOC_FILT''
define view ZCDS_ASSOC_FILTER  as select from zcds_assoc2 as cds2
    {
      cds2._sair[ id = ''TYO'' ].name,
      cds2._sfli.planetype
    }

 

CDS视图的输出结果:

 

希望本文对你有帮助!

 

本文链接:https://www.cnblogs.com/hhelibeb/p/9202781.html

英文原文:CDS Associations and 路径表达式s – ABAP on HANA

参考阅读:ABAP 7.52 中的Open SQL新特性

       Material Quantity Unit Conversion using CDS Views

       HANA CDS与ABAP CDS

 

An association from the table content refers to an

An association from the table content refers to an

今天 hibernate 报了一个错:An association from the table content refers to an unmapped class:com.blog.content.kind

经查,发现是 content.hbm.xml 里面的 Kind 类全名错了。由于之前改动过数据库表,在 content 表里引入了外键 kind_fk,然后用 myeclipse 自动生成 Content 类和相应的 hbm.xml 文件时,就会出现这样的错误!

Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion

Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion

我正在使用 Google 地图 Android SDK 11.6.2(也尝试过 15.0.1),但在地图显示之前我遇到了以下崩溃。已在清单中检查 API
密钥,它可用,但仍然出现此问题。我的 targetSDk 版本为 28。是否会导致此问题。

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/system/priv-app/PrebuiltGmsCorePi/app_chimera/m/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi-v7a,/data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi,/system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at ad.loadClass(:com.google.android.gms.dynamite_dynamiteloader@12848063@12.8.48 (100408-196123505):25)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)聽
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)聽
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)聽
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)聽
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)聽
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)聽

Android java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion

Android java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion

问题是突然出现的,因为我走测试的时候没有问题,但是正式的时候就这样了,报错APP发生的样式是直接闪退。问题报错位置大概是Applicition类,因为这里基本是都是初始化第三方地方,

问题形成原因:可能是api过高了,我这里之前是27。因为需要集成一个发布WiFi给硬件使用的第三方sdk改成了28.

重点:API 版本过高造成的。

解决方法:

在Manifest下的application标签 下加入:

<uses-library android:name="org.apache.http.legacy" android:required="false" />

大概样式:

<application    吧啦吧啦吧啦。。。。。>

<uses-library android:name="org.apache.http.legacy" android:required="false" />

</application>

如果还不OK:

你会发现app连不上网:

解决方法:  一般出现在android版本9.0以上,好像是android对网络请求出现了限制<httpclient>就这个

首先在res下弄一个叫xml的包创建一个文件,例如:aaa

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

之后在manifest里面

<application   

android:networkSecurityConfig="@xml/aaa"

吧啦吧啦吧啦。。。。。>

<uses-library android:name="org.apache.http.legacy" android:required="false" />

</application>

最后在项目build的android目录里面加上

android {
    useLibrary 'org.apache.http.legacy'
}

如果如果如果还不好:十有八九用了服务,还可能是前台服务:

解决方法:  这个一般是因为app里面有服务的原因。android 9.0上使用前台服务,需要添加权限

在manifest里面加上这权限

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

基本是大功告成。

假如还有问题:

现在是考验我们的心里素质了,

首先把电脑调至到桌面,鼠标右击创建一个word文档,其次在里面写入离职证明。最后交由经理。不干了

太欺负人。(开个玩笑嘿嘿)

----致敬不断在bug之路披荆斩浪的我们!!!

   2020最崩溃的一年加油。

 

       

关于An association from the table PersonAddress refers to an unmapped class的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ABAP on HANA之CDS Association和Path Expression、An association from the table content refers to an、Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion、Android java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion等相关知识的信息别忘了在本站进行查找喔。

本文标签: