mapping a composite key with hibernate - java

I'm trying to map one to many relationship using Hibernate :
I have a profil with multiple properties:
Profil.java
public class Profil {
private String idProfil;
private String name;
private Set<Properties> setProperties;
}
Properties.java
public class Properties {
private CompositeId id;
private String length;
private String heigth;
private String width;
}
and a compositeId.java
public class CompositeId {
private String idPropertiy;
private String idProfil;//idProfil is a foreign key
}
idProperty is assigned manually.
idProfil is assigned automatically.
can anyone help me to write the hbm.xml files.

You can use Hibernate Synchronizer Eclipse plugin to generate the *.hbm files and its associated java classes.
HibernateSynchronizer

Related

Primary key values are getting updated in Spring boot

I have created a maven project using Spring Boot with MySQL database.
I have two entity classes that have a primary key in one entity class and another one has a composite primary key.
Customer.java(Has a primary key)
#Entity
public class Customer {
#Id
#GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String address;
private String gstin;
private String phoneNumber;
#CreatedDate
private Date createdDate;
#LastModifiedDate
private Date updatedDate;
//Getters and setters
}
ItemId.java (Idclass for Item.java)
public class ItemId implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private Long billNo;
//Getters and Setters
}
Item.java (Has a composite primary key)
#Entity
#IdClass(ItemId.class)
public class Item {
#Id
private Long id;
#Id
private Long billNo;
private String particular;
private String hsnCode;
private Double quantity;
private String quantityUnit;
private Double rate;
private String rateUnit;
private Double price;
#CreatedDate
private Date createdDate;
#LastModifiedDate
private Date updatedDate;
//Getters and setters
}
here the problem is when an entity object is persisted through repository object with the id which is already there in the table, the Spring boot JPA is not throwing the error that primary key id already present or something like that. Instead the details of the object that is trying to persist are updated to the already available primary key data. The same is happening to the Composite primary key entity.
Is there something wrong on my side or should I do furthermore configurations?
Thanks in advance.
If you are using save method from CrudRepository then you need to understand that if the entity with id (primary-key) null is saved, then it will generate a new id (auto increment depending on the implementation) and save the record. However, if the entity with id that is already in the database is passed in save method then it will update the entity.
I hope you got my point.
Please have a look at this article.
Simply use .insert() function instead of .save() function

Hibernate many-to-many set primary/foreign keys in thrid table

I have 3 java classes, two entites and the third is relationship between them. I want to map them in hbm.xml, but I don't know how, I can't find any example on internet
public class Product {
private String _description;
private String _name;
private double _price;
private Long _productId;
private int _quantity;
public class Order {
private Long _orderId;
private List<OrderProduct> _productList;
private User _user;
public class OrderProduct {
private Order _order;
private Product _product;
How to map this in xml, to this thrid class "OrderProduct" stores only order and product as primary and foreign keys.
Thanks in advice
There is no need for OrderProduct entity. You can define the mapping in the hbm Itself. Please see the below link to understand how its done.
https://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example/

How to put propper DBFLow annotation

I want to insert doctor object to database, how should I put annotations for properties?
I tried to do it with te code shown below.
But i don't know how to do it on list properties specializations and phoneNumbers.
#Table(databaseName = WMDatabase.NAME)
public class Doctor extends BaseModel{
#Column
#PrimaryKey
#Unique(unique = true)
private String doctorId;
#Column
private FullName fullName;
#Column
private String organizationId;
#Column What shuld i put here?????
private List<Specialization> specializations;
#Column What shuld i put here?????
private Contacts contacts;
}
Below are the classes I use for doctor attributes:
public class Contacts extends BaseModel {
private List<PhoneNumber> phoneNumbers;
private String email;
private String fax;
}
public class Specialization extends BaseModel {
#Column
#PrimaryKey
#Unique(unique = true)
private String doctorId;
#Unique(unique = true)
private String specializationName;
public String getSpecializationName() {
return specializationName;
}
public void setSpecializationName(String specializationName) {
this.specializationName = specializationName;
}
DBFlow is a relational database system (not a mongo-type key/value store) and doesn't support lists as columns, according to the doc here.
List : List columns are not supported and not generally proper for a relational database. However, you can get away with a non-generic List column via a TypeConverter. But again, avoid this if you can.
The documentation on relationships may help you refine the model to suit your needs.

Auto populate data in a table having foreign key

I have three classes corresponding to three tables in mysql database. My classes are as follows.
#Entity
#Table(name="location")
public class Location {
private Integer locationId;
private Integer hospitalId;
private Integer regionId;
private String locationCode;
private String locationName;
private String locationType;
#Entity
#Table(name="hospital_region")
public class HospitalRegion {
private Integer regionId;
private Integer hospitalId;
private String regionCode;
private String regionName;
public enum Status{Active,Inactive}
private Status status;
#Entity
#JsonAutoDetect
#Table(name="hospital_information")
public class HospitalInformation{
private Integer hospitalId;
private String shortName;
private String name;
private Integer packageId;
private Date implementationDate;
private Date validFrom;
private Date validUpTo;
private Date lastUpload;
public enum SubscriptionType{Free,Complimentary,Paid}
private Integer totalUsers;
I am making a Web Services for a Hospital Application where one region could have multiple locations(one-to-many) and one hospital could be in multiple regions(one-to-many).
So what I want to do is make a web service that would insert the data into location table.The ideal workflow should be that I shall pass every field in Location class as a json object to insert a record into the Location table.
My Business Logic should first check for my regionId and hospitalId value passed in the json object . If the hospitalId which is passed corresponds to the value of regionId in region table, if both correspond, only then data should be saved.
So I need help about how to implement it as a Business Logic.Thanks in advance
You miss the JPA relationships concept.
Your attributes are not annotated in the 3 classes.
You need to read about:
#ManyToOne Relation
#OneToMany Relation
#OneToOne Relation
#ManyToMany Relation
See more:
JPA Foreign Key Annotation
JPA Relationships 1
JPA Relationships 2

Java Mapping objects to objects - Moo

I have a question about Moo (https://github.com/geoffreywiseman/Moo/) that I haven't been able to solve on my own. I have this class structure:
class Middle{
private int id;
private Upper upper;
private List<Child> children;
private List<Middle> brothers;
}
class Upper{
private int id;
private String name;
private String lastname;
}
class Child{
private int id;
private String name;
}
and I want to translate them to:
class OutputMiddle{
private int id;
#Property(translation="Upper")
private OutputUpper outputUpper;
#CollectionProperty(itemTranslation = Upper.class)
private List<OutputChild> outputChildren;
private List<OutputMiddle> outputBrothers;
}
class OutputUpper{
private int id;
private String outputName;
}
class OutputChild{
private int id;
private String outputName;
}
What I don't know is:
Am I able to translate one attribute from one class to another attribute of another class?
And do the same but to a collection of objects?
And the same but to a collection of objects of the same class?
Why do I need this? Because I'm returning objects of the class "Middle" as JSON (or XML) and I need it to have an structure such as the "OutputMiddle", but I don't want to intervene the JSON after its creation and change the names of the nodes manually.
Thanks!
Try JMapper Framework, it's ease to use and require few configuration

Categories

Resources