0

I'm beginner in Hibernate in JAVA and do not know how to solve this problem

I have two tables: Usuario and Certificado, and i want to create a relationship and theirs.

Class Certificado:

@Entity
@Table(name = "Certificado",
       uniqueConstraints = { @UniqueConstraint( columnNames = { "identifierUnique", "handleUser" } ) } )
public class Certificado {
    @Id
    @GenericGenerator(name="generator", strategy="increment")
    @GeneratedValue(generator="generator")
    private int handle;
    @Column(length = 255)
    @Column
    private int handleUser;

    @ManyToOne
    @JoinColumn(name="handle_user", referencedColumnName="handle")
    private Usuario usuario;
}

Class Usuario:

@Entity
@Table(name = "Usuario")
public class Usuario {
    @Id
    @GenericGenerator(name="generator", strategy="increment")
    @GeneratedValue(generator="generator")
    private int handle;
    @Column(length = 255, unique = true)
    private String email;   
    @Column(length = 20)
    private String password;    
    @OneToMany(mappedBy="usuario", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Certificado> certificados;

        ...
}

When I Execute a SQL function:

public static List<Object[]> loadCertificado30DaysBeforeExperation() throws Exception{      
        Session.begin();
        try {
            try {
                String select = "SELECT c FROM Certificado c "
                    + "LEFT JOIN c.handleUser AS user";
                return Session.list(select);
            } catch (Exception e) {
                throw e;
            }
        } finally {
            Session.commit();
        }
    }

Error:

   java.lang.NullPointerException

StackTrace:

java.lang.NullPointerException
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:393)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3645)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3431)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3309)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:249)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:184)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:137)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778)
    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:606)
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
    at com.sun.proxy.$Proxy15.createQuery(Unknown Source)
    at br.com.persistence.Session.list(Session.java:96)
    at br.com.utils.ServletUtils.loadCertificado30DaysBeforeExperation(ServletUtils.java:134)
    at br.com.monitoramento.MonitorThread.run(MonitorThread.java:25)

2 Answers 2

2

Hibernate's HQL does not support intervals (and generally has extremely poor date maths support).

You'll need to use native SQL, or express the query without interval by doing the date calculations locally on the Java side.

Or you can register a user-defined SQL function and create a PostgreSQL function that does the date maths you want.

See:

and many more.

Sign up to request clarification or add additional context in comments.

1 Comment

i changed sql and occurred another error: NullPointerException.
0

Have you tried removing the '' from '30' -> interval 30 days. Or escape the '30' -> \'30\'.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.