Skip to content

Testcase for merge with eager association #952

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
/* Hibernate, Relational Persistence for Idiomatic Java
*
* SPDX-License-Identifier: Apache-2.0
* Copyright: Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.reactive;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.cfg.Configuration;

import org.junit.Before;
import org.junit.Test;

import io.vertx.ext.unit.TestContext;

public class ManyToOneMergeTest extends BaseReactiveTest {

@Override
protected Configuration constructConfiguration() {
Configuration configuration = super.constructConfiguration();
configuration.addAnnotatedClass( AcademicYearDetailsDBO.class );
configuration.addAnnotatedClass( CampusDBO.class );
return configuration;
}

@Before
public void populateDb(TestContext context) {
CampusDBO campusDBO2 = new CampusDBO();
campusDBO2.setId( 42 );
campusDBO2.setCampusName( "Kuchl" );

CampusDBO campusDBO = new CampusDBO();
campusDBO.setId( 66 );
campusDBO.setCampusName( "Qualunquelandia" );

AcademicYearDetailsDBO academicYearDetailsDBO = new AcademicYearDetailsDBO();
academicYearDetailsDBO.setId( 69 );
academicYearDetailsDBO.setCampusId( campusDBO );
academicYearDetailsDBO.setCreatedUsersId( 12 );
academicYearDetailsDBO.setRecordStatus( 'F' );
academicYearDetailsDBO.setModifiedUsersId( 66 );
test( context,
getMutinySessionFactory().withTransaction( (session, transaction) -> session.persistAll(
campusDBO, campusDBO2,
academicYearDetailsDBO
) )
);
}

@Test
public void test(TestContext context) {
test( context, getMutinySessionFactory()
.withSession( session -> session
.createQuery( "select dbo from AcademicYearDetailsDBO dbo", AcademicYearDetailsDBO.class )
.getSingleResult() )
.chain( dbo -> {
dbo.setRecordStatus( 'A' );
System.out.println( dbo.getCampusId().getId() );//for example here campus id is 11
CampusDBO campusDBO = new CampusDBO();
campusDBO.setId( 5 );
dbo.setCampusId( campusDBO ); // need to update as 5
return getMutinySessionFactory()
.withTransaction( (session, transaction) -> {
dbo.setCampusId( session.getReference( CampusDBO.class, 42 ) );
return session.merge( dbo );
} );
} )
);
}

@Entity(name = "AcademicYearDetailsDBO")
@Table(name = "erp_academic_year_detail")
static class AcademicYearDetailsDBO implements Serializable {
@Id
@Column(name = "erp_academic_year_detail_id")
private Integer id;

// LAZY will work
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "erp_campus_id")
private CampusDBO campusId;

@Column(name = "record_status")
private char recordStatus;

@Column(name = "created_users_id")
private Integer createdUsersId;

@Column(name = "modified_users_id")
private Integer modifiedUsersId;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public CampusDBO getCampusId() {
return campusId;
}

public void setCampusId(CampusDBO campusId) {
this.campusId = campusId;
}

public char getRecordStatus() {
return recordStatus;
}

public void setRecordStatus(char recordStatus) {
this.recordStatus = recordStatus;
}

public Integer getCreatedUsersId() {
return createdUsersId;
}

public void setCreatedUsersId(Integer createdUsersId) {
this.createdUsersId = createdUsersId;
}

public Integer getModifiedUsersId() {
return modifiedUsersId;
}

public void setModifiedUsersId(Integer modifiedUsersId) {
this.modifiedUsersId = modifiedUsersId;
}
}

@Entity(name = "CampusDBO")
@Table(name = "erp_campus")
static class CampusDBO implements Serializable {
@Id
@Column(name = "erp_campus_id")
private Integer id;

@Column(name = "campus_name")
private String campusName;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getCampusName() {
return campusName;
}

public void setCampusName(String campusName) {
this.campusName = campusName;
}
}
}