annotation jpa hibernate - jpa

in my class request.java I have attribute logo
logo is an image that will record in the mysql database
I am looking for the annotation required attribute logo
I try with
# Lob
private String logo;

Most likely you do not want to persist image with character data type.
For BLOB type in database byte[] is correct Java type:
#Lob
private byte[] logo;

Related

Persist String variable to Lob with Micronaut Data JDBC

I'm using Micronaut Data JDBC and I have an issue.
I have a #MappedEntity for JDBC with a content field that is a String used in a JPA context as follows:
#Lob
#Column(name = "content")
private String content;
I need to migrate this code to JDBC and I need that this content will be persisted as a Lob as well in a PostgreSQL.
With the current code, I'm just able to store the content as a String.
Any idea of how could I achieve that?
For persisting the String content as a LOB, what needs to be done is to annotate the field as follows:
#ColumnTransformer(write = "lo_from_bytea(0, ?::bytea)")
#Column(name = "content")
private String content;
by doing this, PostgreSQL stores an ID in the content column and the data is persisted in the pg_largeobject table as it was desired.

Best practice of handling relations between tables in Spring Data R2dbc

I tried to create a user/roles relation in RDBMS and want to use R2dbc(Spring Data R2dbc) to shake hands with the backend database.
Assume there are three tables, users, roles, and user_roles.
#Table("users")
class User {
#Id
private String username;
private String password;
private String email;
#Builder.Default
private boolean active = true;
#Builder.Default
private List<String> roles = new ArrayList<>();
#Column("created_at")
private LocalDateTime createdDate;
}
Unlike JPA, R2dbc reuses the spring-data-relational-common(which is also used in Spring Data Jdbc) to annotate the tables, but there is no facility to resolve the relations, such as the roles here.
Spring Data R2DBC currently does not support relationships.
So what you would do is to have a separate entity User2Role with two properties: String username and String rolename referencing the ids of the referenced entities.
Since you also tagged the question Spring Data JDBC: Spring Data JDBC does support 1:1 and 1:M references, but not M:1 or M:N relationships. See https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates for some background on that.
Spring Data R2DBC might eventually move to the same model.

Will my Spring Data Jpa method return all foreign fields?

If I have a table like this :
Client
private Long int;
private String name;
#ManyToOne(mappedBy="otherField")
private Address addresses;
And I Create a repository that extends JPA Repository. Given the name of the client, I want to get as results also the Address Table fields.
Using the method
Client findByName(String name)
Will my this also return all the fields that are on the Address Table ?
Like:
Address
private Long id;
private String city;
private Int code;
private String street;
From the docs
The Hibernate recommendation is to statically mark all associations
lazy and to use dynamic fetching strategies for eagerness. This is
unfortunately at odds with the JPA specification which defines that
all one-to-one and many-to-one associations should be eagerly fetched
by default. Hibernate, as a JPA provider, honors that default.
So Hibernate behaves the same as JPA:
OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER
Also take a look at the JPA sepcifications here.

Save form data to multi-value field on MongoDB using Play2.2.2

I'm experimenting with play (v2.2.2), and I have it connected to MongoDB (v2.4.6) using jackson.
I have a models.Role class with the following attributes:
#Id
#ObjectId
public String id;
public String name;
public ArrayList<String> permissions;
On the template (roles.scala.html), I can easily get the list of permissions to be printed on the HTML, but when I try to add a new role passing a single permission as a string in the form as an #InputText field, it does not get recorded in MongoDB. I suppose that it is because play/scala is trying to assign a simple String to an ArrayList<String>.
Any ideas on the propper approach? Maybe I should do some logic on the create() method under Role class?

How to define a big string in Spring Roo annotation(or jpa annotation) entity, varchar(255) is not enough

In spring-roo entity, I define a content field to record the content of the article:
#NotNull
private String content;
But in mysql field, it mapped to varchar(255), it's too short to record a content of article so the following exception thrown:
ERROR org.hibernate.util.JDBCExceptionReporter - Data truncation: Data too long for column 'content' at row 1
My question is what's the big string field type in mysql? (In access db, it's "memo"), how to define this annotation in Spring Roo to make it record more data? Thanks
One option would be to add the Size annotation, e.g.
#NotNull
#Size(max = 500)
private java.lang.String content;
Another option would be to use a LOB field:
#NotNull
#Lob
private byte[] content;
If I need a String field larger than about 255 characters, I usually use a LOB field. However, note that it is generally not possible to search for data inside a LOB field.
Try
#Column(columnDefinition="varchar(255)")