Impetus / kundera

A JPA 2.1 compliant Polyglot Object-Datastore Mapping Library for NoSQL Datastores.Please subscribe to:

Home Page:http://groups.google.com/group/kundera-discuss/subscribe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Used in Hbase: java.lang.IllegalArgumentException: Can not set int field com.zju.edu.entity.User.userId to com.zju.edu.entity.User

lmy86263 opened this issue · comments

hello, when I use it in hbase, some exception has appeared as title issued.

1. First, my entity class like this:

public class User
{
    public User(){}

    @Id
    @Column(name = "rowkey")
    private int userId;

    @Column(name = "PERSON_NAME")
    private String userName;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

2. and my persistence like this:

<persistence-unit name="hbase_pu">
		<provider>com.impetus.kundera.KunderaPersistence</provider>
		<properties>
			<property name="kundera.nodes" value="localhost" />
			<property name="kundera.port" value="16010" />
			<property name="kundera.keyspace" value="KunderaExamples" />
			<property name="kundera.dialect" value="hbase" />
			<property name="kundera.ddl.auto.prepare" value="create" />
			<property name="kundera.client.lookup.class" value="com.impetus.client.hbase.HBaseClientFactory" />
		</properties>
	</persistence-unit>

3. my persist code is like this:

User user = new User();
user.setUserId(1);
user.setUserName("John");
entityManager().persist(user);

4. and the phenomenon is like this: I can connect to zookeeper server and HMaster, and create a table in hbase, but I can not persist any entity.

5. the exception log like this:

java.lang.IllegalArgumentException: Can not set int field com.zju.edu.entity.User.userId to com.zju.edu.entity.User
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:1.8.0_65]
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_65]
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58) ~[na:1.8.0_65]
	at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(UnsafeIntegerFieldAccessorImpl.java:56) ~[na:1.8.0_65]
	at sun.reflect.UnsafeIntegerFieldAccessorImpl.get(UnsafeIntegerFieldAccessorImpl.java:36) ~[na:1.8.0_65]
	at java.lang.reflect.Field.get(Field.java:393) ~[na:1.8.0_65]
	at com.impetus.kundera.property.PropertyAccessorHelper.getObject(PropertyAccessorHelper.java:140) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.property.PropertyAccessorHelper.getId(PropertyAccessorHelper.java:245) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.graph.GraphGenerator.onPreChecks(GraphGenerator.java:223) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.graph.GraphGenerator.generate(GraphGenerator.java:127) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.graph.GraphGenerator.generateGraph(GraphGenerator.java:78) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.persistence.PersistenceDelegator.persist(PersistenceDelegator.java:130) ~[kundera-core-3.13.jar:na]
	at com.impetus.kundera.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:174) ~[kundera-core-3.13.jar:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
	at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350) ~[spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at com.sun.proxy.$Proxy88.persist(Unknown Source) ~[na:na]

6. something else that can be helpful

I found the error always appear about the field which is annotated by @id, I hope it can be helpful.

@lmy86263 what Kundera version are you using? Try latest version i.e. 3.13 (if using older version).

You can try sample project - https://github.com/Impetus/Kundera#sample-projects

@devender-yadav yes, it works with the examples. But, I want to use it in spring framework. And I follow the tutorial about integration with spring step by step, so the exception appears.

And the Kundera version is the latest version 3.13, and I use spring boot 2.0, the related configuration like this:

@Configuration
public class KunderaConfig {
    @Bean
    public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {
        LocalContainerEntityManagerFactoryBean entityMF = new LocalContainerEntityManagerFactoryBean();
        entityMF.setPersistenceUnitName("hbase_pu");
        entityMF.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
        return entityMF;
    }

    @Bean
    public PersistenceAnnotationBeanPostProcessor persistenceAnnotationBeanPostProcessor() {
        return new PersistenceAnnotationBeanPostProcessor();
    }

    @Bean
    public DefaultPersistenceUnitManager defaultPersistenceUnitManager() {
        DefaultPersistenceUnitManager persistenceUM = new DefaultPersistenceUnitManager();
        persistenceUM.setPersistenceXmlLocation("classpath*:META-INF/persistence-temp.xml");
        return persistenceUM;
    }
}

and the client code is like this:


    @Resource
    @PersistenceContext(unitName = "hbase_pu", type = PersistenceContextType.EXTENDED)
    public EntityManager em;
    
    public void persist(){
        User user = new User();
        user.setUserId(1);
        user.setUserName("John");

        em.persist(user);
        em.close();

    }

by the way, my hbase server is running in standalone mode.

@lmy86263 running in standalone mode shouldn't be a problem. could you please share sample project so that I can reproduce at my end?