Fórum

Many to Many Relationship possible in Liferay 7?

Rajat Pancholy, modificado 6 Anos atrás.

Many to Many Relationship possible in Liferay 7?

New Member Postagens: 5 Data de Entrada: 10/06/17 Postagens Recentes
Hi, I was trying to implement Many-to-Many relationship using ServiceBuilder in Liferay 7, but I end up with an error in the generated Persistance classes.

The following are the entities in the ServiceBuilder along with the Mapping Table;

[indent]
<service-builder package-path="com.manytomany">
	<namespace>ManyToMany</namespace>
   <entity name="Employee" local-service="true" remote-service="false" table="Employee">
        <column name="eid" type="long" primary="true"></column>
        <column name="name" type="String"></column>
        <column name="address" type="String"></column>
        <column name="deptid" type="Collection" entity="Department" mapping-table="Employee_department" />
   </entity>
   
    <entity name="Department" local-service="true" remote-service="false" table="Department">
        <column name="deptid" type="long" primary="true"></column>
        <column name="department" type="String"></column>
        <column name="eid" type="Collection" entity="Employee" mapping-table="Employee_department" />
    </entity>
</service-builder>
[/indent]

But then after building Service and refreshing Gradle Project, the generated Persistence Impl Classes throw an error:



The error is:

 symbol:   method getCompanyId()
  location: variable department of type Department
D:\Liferay\workspace\LProject\modules\ManyToMany\ManyToMany-service\src\main\java\com\mtm\service\persistence\impl\DepartmentPersistenceImpl.java:851: error: cannot find symbol
			departmentToEmployeeTableMapper.addTableMapping(department.getCompanyId(),


The generated tables.sql file:

create table Department (
	deptid LONG not null primary key,
	department VARCHAR(75) null
);

create table Employee (
	eid LONG not null primary key,
	name VARCHAR(75) null,
	address VARCHAR(75) null
);

create table ManyToManyService_Employee_department (
	companyId LONG not null,
	deptid LONG not null,
	eid LONG not null,
	primary key (deptid, eid)
);

^
The part where the error resides in DepartmentPersistenceImpl.java is:

[indent]

	@Override
	public void addEmployee(long pk, long employeePK) {
		Department department = fetchByPrimaryKey(pk);

		if (department == null) {
			departmentToEmployeeTableMapper.addTableMapping(companyProvider.getCompanyId(),
				pk, employeePK);
		}
		else {
			departmentToEmployeeTableMapper.addTableMapping(department.getCompanyId(),
				pk, employeePK);
		}
	}
[/indent]

The part where the error resides in EmployeePersistenceImpl.java:

[indent]

	@Override
	public void addDepartment(long pk, long departmentPK) {
		Employee employee = fetchByPrimaryKey(pk);

		if (employee == null) {
			employeeToDepartmentTableMapper.addTableMapping(companyProvider.getCompanyId(),
				pk, departmentPK);
		}
		else {
			employeeToDepartmentTableMapper.addTableMapping(employee.getCompanyId(),
				pk, departmentPK);
		}
	}
[/indent]

I am new to Liferay Development, Can anyone help me resolve what's the issue here?
Ilja Sidoroff, modificado 6 Anos atrás.

RE: Many to Many Relationship possible in Liferay 7?

New Member Mensagem: 1 Data de Entrada: 07/07/17 Postagens Recentes
I had a similar problem when migrating a service builder module from an old Liferay to DXP. I noticed that I needed to add companyId column to my tables to get compiling service builder code (see recommendation here https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/defining-an-object-relational-map-with-service-builder , in Step 4).

I haven't inspected the issue yet, and I don't know wheter it is a bug or a feature.
thumbnail
venkata ashok kumar ananthapalli, modificado 6 Anos atrás.

RE: Many to Many Relationship possible in Liferay 7?

New Member Postagens: 8 Data de Entrada: 16/09/14 Postagens Recentes
Iam also facing the Same problem, is it required to add column Id in entity?

D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmpAddressPersistenceImpl.java:1412: error: cannot find symbol
empAddressToEmployeeTableMapper.addTableMapping(empAddress.getCompanyId(),
^
symbol: method getCompanyId()
location: variable empAddress of type EmpAddress
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmpAddressPersistenceImpl.java:1432: error: cannot find symbol
empAddressToEmployeeTableMapper.addTableMapping(empAddress.getCompanyId(),
^
symbol: method getCompanyId()
location: variable empAddress of type EmpAddress
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmpAddressPersistenceImpl.java:1453: error: cannot find symbol
companyId = empAddress.getCompanyId();
^
symbol: method getCompanyId()
location: variable empAddress of type EmpAddress
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmpAddressPersistenceImpl.java:1560: error: cannot find symbol
companyId = empAddress.getCompanyId();
^
symbol: method getCompanyId()
location: variable empAddress of type EmpAddress
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmployeePersistenceImpl.java:1421: error: cannot find symbol
employeeToEmpAddressTableMapper.addTableMapping(employee.getCompanyId(),
^
symbol: method getCompanyId()
location: variable employee of type Employee
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmployeePersistenceImpl.java:1441: error: cannot find symbol
employeeToEmpAddressTableMapper.addTableMapping(employee.getCompanyId(),
^
symbol: method getCompanyId()
location: variable employee of type Employee
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmployeePersistenceImpl.java:1462: error: cannot find symbol
companyId = employee.getCompanyId();
^
symbol: method getCompanyId()
location: variable employee of type Employee
D:\oot\voot_workspace\voot_liferay_workspace\modules\Employee\Employee-service\src\main\java\com\valtech\service\persistence\impl\EmployeePersistenceImpl.java:1571: error: cannot find symbol
companyId = employee.getCompanyId();
^
symbol: method getCompanyId()
location: variable employee of type Employee
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
8 errors
FAILED

FAILURE: Build failed with an exception.