spring-boot-data-geode icon indicating copy to clipboard operation
spring-boot-data-geode copied to clipboard

Inheriting from entity types causes failure when using entity-defined Regions

Open yozaner1324 opened this issue 3 years ago • 1 comments

Failure: The bean 'Person' could not be registered. A bean with that name has already been defined and overriding is disabled.

Scenario: This occurs when a class extends a data class annotated with @Region, even if the subclass is not used.

Example:

@Region("Person")
class Person{
	@Id
	private String name;
	public Person(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}

class Customer extends Person {
	public Customer(String name) {
		super(name);
	}
}

If Customer doesn't extend Person, there is no issue, but if it does, the application context will fail to load.

Work arounds:

  • Set spring.main.allow-bean-definition-overriding to true
  • Don't use entity defined regions
  • Don't inherit from data classes used to define regions.

Repo reproducing issue: https://github.com/yozaner1324/SBDG-using-sealed-classes

yozaner1324 avatar Mar 02 '22 21:03 yozaner1324

TODO: Move to Spring Data for Apache Geode (SDG) Issues since the @EnableEntityDefinedRegions annotation is specific to Spring Data Geode.

jxblum avatar Mar 02 '22 21:03 jxblum