DEV Community

Discussion on: Introducing MikroORM, TypeScript data-mapper ORM with Identity Map

Collapse
 
artoodeeto profile image
aRtoo • Edited

Hello. This is very nice. May I ask whats the difference between Entity manager and repository? Can I use them interchangeably? Or they work together in the same way? Can I use it like an active record? If there not the same is there a benefit over the other? Thank you for your response sir. Will definitely share this to some friends.

Example:

class BaseClass extends EntityManager {}

@Entity()
class User extends BaseClass {
 aMethod: void {};
}

User.create()
Enter fullscreen mode Exit fullscreen mode

Ps: i googled the difference, it shows the stack over flow about java and its all abstraction over the other.

Collapse
 
b4nan profile image
Martin Adámek • Edited

All what depository does it to forward the calls to EM, so the only real difference is that it bares the entity name for you. Check the source code, its really just about that:

github.com/mikro-orm/mikro-orm/blo...

// this is equal
const a1 = await em.findOne(Author, 1);
const a2 = await em.getRepository(Author).findOne(1);

So the benefit is that the API is simpler (no need to pass the entity name), and that repositories are an extension point - you can implement your own and add more methods there.

And no, there is no active record support and it never will be - I don't think it could even work.

Collapse
 
artoodeeto profile image
aRtoo

But still I can use the EntityManager like:

class User extends EntityManage {
}

User.findOne(User, 1)

I'm asking this because instead of importing em each time you want to access an Entity would be cumbersome. Instead, I can just extend its static methods.

Thank you for the great response sir.

Thread Thread
 
b4nan profile image
Martin Adámek

No, as I said, this is not supported. You need to have an instance of entity manager (one per each request) as it holds the state (identity map).