What is the difference between @ManyToOne(optional=false) vs. @Column(nullable=false)

后端 未结 2 961
感情败类
感情败类 2020-12-22 19:08

In JPA, I am confused when to use the attribute optional=false and the annotation @Column(nullable=false). What is the difference?

相关标签:
2条回答
  • 2020-12-22 19:35

    Both is used to prevent a null value, but if you mind that null should be blocked in ...

    The database layer (and you want to generate the schema using JPA) --> use @Column(nullable=false)

    The runtime (and before contacting the database)--> use optional=false (much faster than the first checking).

    If you want both abilities, use them both.

    0 讨论(0)
  • 2020-12-22 19:36

    @Column(nullable=false) is an instruction for generating the schema. The database column generated off the class will be marked not nullable in the actual database.

    optional=false is a runtime instruction. The primary functional thing it does is related to Lazy Loading. You can't lazy load a non-collection mapped entity unless you remember to set optional=false (because Hibernate doesn't know if there should be a proxy there or a null, unless you tell it nulls are impossible, so it can generate a proxy.)

    0 讨论(0)
提交回复
热议问题