-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathUser.java
62 lines (51 loc) · 1.7 KB
/
User.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package tech.ydb.hibernate.user;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.Instant;
import java.util.concurrent.ThreadLocalRandom;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.type.SqlTypes;
/**
* @author Kirill Kurdyukov
*/
@Data
@Entity
@Table(name = "backup/Users")
public class User {
@Id
@GeneratedValue(generator = "random-int-id")
@GenericGenerator(name = "random-int-id", type = RandomIntGenerator.class)
private int id;
@Column(name = "created_at")
@CreationTimestamp
private Instant createdAt;
@Column(name = "updated_at")
@UpdateTimestamp
private Instant updatedAt;
@Column(name = "name")
private String name;
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "json")
private Json json;
@Data
// @Embeddable TODO Dialect does not support aggregateComponentAssignmentExpression: org.hibernate.dialect.aggregate.AggregateSupportImpl
public static class Json {
private int a;
private String b;
}
public static class RandomIntGenerator implements IdentifierGenerator {
@Override
public Object generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) {
return ThreadLocalRandom.current().nextInt();
}
}
}