I have seen this question at SO which tends to lead towards Primitives and also seen this one from coderanch which tends to lead towards wrappers. Both are slightly old too.
I do not have any special needs just want to know a standard good practice.
Examples on web are mixed too. e.g some with go like this:
@Id
@Column(name = "CUSTOMER_ID")
public long customerId;
Others with Wrappers:
@Id
@Column(name = "CUSTOMER_ID")
public Long customerId;
The difference between the two is nullability. the primitive type is unable to be null, while the “Wrapped” type can be null.
I prefer to use the wrapped type as you can tell if the object has been saved/loaded to/from the database whether or not the id value is null.
I don’t think there is a “best practice” here, maybe a matter of style?