kandi background
Explore Kits

hibernate-orm | Hibernate's core Object/Relational Mapping functionality | Object-Relational Mapping library

 by   hibernate Java Version: 5.2.0 License: No License

 by   hibernate Java Version: 5.2.0 License: No License

Download this library from

kandi X-RAY | hibernate-orm Summary

hibernate-orm is a Java library typically used in Utilities, Object-Relational Mapping, Hibernate, JPA, Oracle applications. hibernate-orm has no bugs, it has no vulnerabilities, it has build file available and it has medium support. You can download it from GitHub, Maven.
Hibernate ORM is a library providing Object/Relational Mapping (ORM) support to applications, libraries, and frameworks. It also provides an implementation of the JPA specification, which is the standard Java specification for ORM. This is the repository of its source code; see Hibernate.org for additional information.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • hibernate-orm has a medium active ecosystem.
  • It has 4916 star(s) with 3093 fork(s). There are 316 watchers for this library.
  • It had no major release in the last 12 months.
  • hibernate-orm has no issues reported. There are 169 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of hibernate-orm is 5.2.0
hibernate-orm Support
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
hibernate-orm Support
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping

quality kandi Quality

  • hibernate-orm has no bugs reported.
hibernate-orm Quality
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
hibernate-orm Quality
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping

securitySecurity

  • hibernate-orm has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
hibernate-orm Security
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
hibernate-orm Security
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping

license License

  • hibernate-orm does not have a standard license declared.
  • Check the repository for any license declaration and review the terms closely.
  • Without a license, all rights are reserved, and you cannot use the library in your applications.
hibernate-orm License
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
hibernate-orm License
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping

buildReuse

  • hibernate-orm releases are available to install and integrate.
  • Deployable package is available in Maven.
  • Build file is available. You can build the component from source.
  • Installation instructions are not available. Examples and code snippets are available.
hibernate-orm Reuse
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
hibernate-orm Reuse
Best in #Object-Relational Mapping
Average in #Object-Relational Mapping
Top functions reviewed by kandi - BETA

kandi has reviewed hibernate-orm and discovered the below as its top functions. This is intended to give you an instant insight into hibernate-orm implemented functionality, and help decide if they suit your requirements.

  • Processes the element annotations .
  • Binds a many - to - many collection .
  • Build default column name .
  • Parse a JQL keyword .
  • Normalize the data source .
  • Registers the Sybase keywords .
  • Binds the key from an association table .
  • Enhances the given type .
  • Registers the Derby keywords .
  • Bind all attribute attributes to the given mapping document .

hibernate-orm Key Features

Hibernate's core Object/Relational Mapping functionality

Executing Tasks

copy iconCopydownload iconDownload
gradle tasks

Using "profiles"

copy iconCopydownload iconDownload
gradle clean build -Pdb=pgsql

Running database-specific tests from the IDE using "profiles"

copy iconCopydownload iconDownload
./gradlew setDataBase -Pdb=pgsql

Starting test databases locally as docker containers

copy iconCopydownload iconDownload
./docker_db.sh postgresql_9_5

Why the class attributes in the quarku panache example are PUBLIC instead of PRIVATE

copy iconCopydownload iconDownload
If you don’t want to bother defining getters/setters for your entities, you can make them extend PanacheEntityBase and Quarkus will generate them for you. You can even extend PanacheEntity and take advantage of the default ID it provides.
@Entity
public class Person extends PanacheEntity {
    public String name;
    public LocalDate birth;
    public Status status;

    public static Person findByName(String name){
        return find("name", name).firstResult();
    }

    public static List<Person> findAlive(){
        return list("status", Status.Alive);
    }

    public static void deleteStefs(){
        delete("name", "Stef");
    }
}
@Entity
public class Person {
    @Id @GeneratedValue private Long id;
    private String name;
    private LocalDate birth;
    private Status status;

    public Long getId(){
        return id;
    }
    public void setId(Long id){
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public LocalDate getBirth() {
        return birth;
    }
    public void setBirth(LocalDate birth) {
        this.birth = birth;
    }
    public Status getStatus() {
        return status;
    }
    public void setStatus(Status status) {
        this.status = status;
    }
}
-----------------------
If you don’t want to bother defining getters/setters for your entities, you can make them extend PanacheEntityBase and Quarkus will generate them for you. You can even extend PanacheEntity and take advantage of the default ID it provides.
@Entity
public class Person extends PanacheEntity {
    public String name;
    public LocalDate birth;
    public Status status;

    public static Person findByName(String name){
        return find("name", name).firstResult();
    }

    public static List<Person> findAlive(){
        return list("status", Status.Alive);
    }

    public static void deleteStefs(){
        delete("name", "Stef");
    }
}
@Entity
public class Person {
    @Id @GeneratedValue private Long id;
    private String name;
    private LocalDate birth;
    private Status status;

    public Long getId(){
        return id;
    }
    public void setId(Long id){
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public LocalDate getBirth() {
        return birth;
    }
    public void setBirth(LocalDate birth) {
        this.birth = birth;
    }
    public Status getStatus() {
        return status;
    }
    public void setStatus(Status status) {
        this.status = status;
    }
}
-----------------------
If you don’t want to bother defining getters/setters for your entities, you can make them extend PanacheEntityBase and Quarkus will generate them for you. You can even extend PanacheEntity and take advantage of the default ID it provides.
@Entity
public class Person extends PanacheEntity {
    public String name;
    public LocalDate birth;
    public Status status;

    public static Person findByName(String name){
        return find("name", name).firstResult();
    }

    public static List<Person> findAlive(){
        return list("status", Status.Alive);
    }

    public static void deleteStefs(){
        delete("name", "Stef");
    }
}
@Entity
public class Person {
    @Id @GeneratedValue private Long id;
    private String name;
    private LocalDate birth;
    private Status status;

    public Long getId(){
        return id;
    }
    public void setId(Long id){
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public LocalDate getBirth() {
        return birth;
    }
    public void setBirth(LocalDate birth) {
        this.birth = birth;
    }
    public Status getStatus() {
        return status;
    }
    public void setStatus(Status status) {
        this.status = status;
    }
}

LazyInitializationException in a Spring Transaction

copy iconCopydownload iconDownload
spring:
  jpa:
    properties:
      hibernate:
        enable_lazy_load_no_trans: true

Create a dynamic Mongo query in Java

copy iconCopydownload iconDownload
Filters.or(Bson...)
Filters.or(Iterable<Bson>)
public Bson or(String field, List<String> values) {
  return Filters.or(
      values.stream()
        .map(v -> Filters.eq(field, v))
        .collect(Collectors.toList()));
}
-----------------------
Filters.or(Bson...)
Filters.or(Iterable<Bson>)
public Bson or(String field, List<String> values) {
  return Filters.or(
      values.stream()
        .map(v -> Filters.eq(field, v))
        .collect(Collectors.toList()));
}
-----------------------
 List<String> stringList = new ArrayList<>();
 stringList.add("Aprilia");
 stringList.add("Moto Guzzi");

 Bson bson = or("manufacturer", stringList);

 MongoCursor<Document> cursor = mongoCollectionMotorcycles.find(or("manufacturer", stringList)).iterator();;
 try {
     while (cursor.hasNext()) {
         LOGGER.info(">>>>> 6.4 motorcycleApriliaMotoGuzzi = {}", cursor.next());
     }
 } finally {
     cursor.close();
 }

public Bson or(String field, List<String> values) {
    return Filters.or(
        values.stream()
           .map(v -> Filters.eq(field, v))
           .collect(Collectors.toList()));
    }
}
INFO  [com.gostophandle.ejb.MotorcyclesEJB] (default task-1) >>>>> 6.4 motorcycleApriliaMotoGuzzi = Document{{_id=61d70d6a8c9e88075702af3e, manufacturer=Aprilia, model=RS 660, modelType=E5, typesOf=Sport, dateProductionStarted=Fri Jan 01 00:00:00 GMT 2021, dateProductionEnded=Fri Jan 01 00:00:00 GMT 2021, engine=Document{{type=Four-Stroke, displacement=659.0, cylinder=2.0, capacityUnit=cc, carburation=, bore=0.0, boreMeasurement=mm, stroke=0.0, strokeMeasurement=mm, distribution=, maxiumPowerHp=0.0, maxiumPowerKilowatt=0.0, maxiumPowerRpm=0.0, maximumTorque=0.0, maximumTorqueUnit=Nm, maximumTorqueRpm=0.0}}, performance=Document{{topSpeedMph=105.0, topSpeedKph=0.0, accelleration30Mph=0.0, accelleration60Mph=0.0, accelleration100Mph=0.0, accelleration30Kph=0.0, accelleration60Kph=0.0, accelleration100Kph=0.0}}, dimensionsWeights=Document{{batteryCapacity=, casterAngleDegrees=0.0, dimensionsL=0.0, dimensionsW=0.0, dimensionsH=0.0, frameType=, fuelTankCapacityLitres=0.0, fuelConsumption=0.0, groundClearance=0.0, kerbWeight=0.0, seatHeight=0.0, trail=0.0, wheelbase=0.0}}, chassisBrakesSuspensionWheels=Document{{frame=1, swingarm=2, absSystem=3, frontBrakes=4, rearBrakes=5, frontSuspension=6, rearSuspension=7, tyresFront=8, tyresRear=9, frontTyre=10, rearTyre=11, frontWheel=12, rearWheel=13, instrumentDisplayFunctions=14}}, transmission=Document{{clutch=1, clutchOperation=2, finalDrive=3, gearbox=4, transmissionType=5, primaryReduction=0.0, gearRatios1st=0.0, greaRatios2nd=0.0, gearRatios3rd=0.0, gearRatios4th=0.0, gearRatios5th=0.0, gearRatios6th=0.0}}, instruments=Document{{headlights=1, socket=2, ignitionSystem=3, instruments=4, tailLight=5, usbSocket=6}}, electrics=Document{{}}, colours=[Document{{colour=Acid Gold}}, Document{{colour=Lava Red}}, Document{{colour=Apex Black}}], accessories=[], image=Document{{file=/Users/NOTiFY/IdeaProjects/GoStopHandle/images, url=/Aprilia/2021/, png=ap6115200ebm03-01-m.webp, dimensionsWidth=1500, dimensionsHeight=1000}}}}
12:42:59,335 INFO  [com.gostophandle.ejb.MotorcyclesEJB] (default task-1) >>>>> 6.4 motorcycleApriliaMotoGuzzi = Document{{_id=61d70d6a8c9e88075702af58, manufacturer=Moto Guzzi, model=Le Mans, modelType=I, typesOf=Sport, dateProductionStarted=Thu Jan 01 00:00:00 GMT 1976, dateProductionEnded=Sat Jan 01 00:00:00 GMT 1977, engine=Document{{type=Four-Stroke, displacement=850.0, cylinder=2.0, capacityUnit=cc, carburation=null, bore=80.0, boreMeasurement=mm, stroke=74.0, strokeMeasurement=mm, distribution=null, maxiumPowerHp=85.0, maxiumPowerKilowatt=38.0, maxiumPowerRpm=6200.0, maximumTorque=60.0, maximumTorqueUnit=Nm, maximumTorqueRpm=4900.0}}, electrics=Document{{}}, colours=[Document{{colour=Red}}, Document{{colour=Silver Blue}}], accessories=[Document{{productNumber=MG0123456789, productName=Product 1}}, Document{{productNumber=MG0123456789, productName=Product 2}}], image=Document{{file=/Users/NOTiFY/IdeaProjects/GoStopHandle/images, url=/MotoGuzzi/1976/, png=motorcycle.png, dimensionsWidth=900, dimensionsHeight=440}}}}
-----------------------
 List<String> stringList = new ArrayList<>();
 stringList.add("Aprilia");
 stringList.add("Moto Guzzi");

 Bson bson = or("manufacturer", stringList);

 MongoCursor<Document> cursor = mongoCollectionMotorcycles.find(or("manufacturer", stringList)).iterator();;
 try {
     while (cursor.hasNext()) {
         LOGGER.info(">>>>> 6.4 motorcycleApriliaMotoGuzzi = {}", cursor.next());
     }
 } finally {
     cursor.close();
 }

public Bson or(String field, List<String> values) {
    return Filters.or(
        values.stream()
           .map(v -> Filters.eq(field, v))
           .collect(Collectors.toList()));
    }
}
INFO  [com.gostophandle.ejb.MotorcyclesEJB] (default task-1) >>>>> 6.4 motorcycleApriliaMotoGuzzi = Document{{_id=61d70d6a8c9e88075702af3e, manufacturer=Aprilia, model=RS 660, modelType=E5, typesOf=Sport, dateProductionStarted=Fri Jan 01 00:00:00 GMT 2021, dateProductionEnded=Fri Jan 01 00:00:00 GMT 2021, engine=Document{{type=Four-Stroke, displacement=659.0, cylinder=2.0, capacityUnit=cc, carburation=, bore=0.0, boreMeasurement=mm, stroke=0.0, strokeMeasurement=mm, distribution=, maxiumPowerHp=0.0, maxiumPowerKilowatt=0.0, maxiumPowerRpm=0.0, maximumTorque=0.0, maximumTorqueUnit=Nm, maximumTorqueRpm=0.0}}, performance=Document{{topSpeedMph=105.0, topSpeedKph=0.0, accelleration30Mph=0.0, accelleration60Mph=0.0, accelleration100Mph=0.0, accelleration30Kph=0.0, accelleration60Kph=0.0, accelleration100Kph=0.0}}, dimensionsWeights=Document{{batteryCapacity=, casterAngleDegrees=0.0, dimensionsL=0.0, dimensionsW=0.0, dimensionsH=0.0, frameType=, fuelTankCapacityLitres=0.0, fuelConsumption=0.0, groundClearance=0.0, kerbWeight=0.0, seatHeight=0.0, trail=0.0, wheelbase=0.0}}, chassisBrakesSuspensionWheels=Document{{frame=1, swingarm=2, absSystem=3, frontBrakes=4, rearBrakes=5, frontSuspension=6, rearSuspension=7, tyresFront=8, tyresRear=9, frontTyre=10, rearTyre=11, frontWheel=12, rearWheel=13, instrumentDisplayFunctions=14}}, transmission=Document{{clutch=1, clutchOperation=2, finalDrive=3, gearbox=4, transmissionType=5, primaryReduction=0.0, gearRatios1st=0.0, greaRatios2nd=0.0, gearRatios3rd=0.0, gearRatios4th=0.0, gearRatios5th=0.0, gearRatios6th=0.0}}, instruments=Document{{headlights=1, socket=2, ignitionSystem=3, instruments=4, tailLight=5, usbSocket=6}}, electrics=Document{{}}, colours=[Document{{colour=Acid Gold}}, Document{{colour=Lava Red}}, Document{{colour=Apex Black}}], accessories=[], image=Document{{file=/Users/NOTiFY/IdeaProjects/GoStopHandle/images, url=/Aprilia/2021/, png=ap6115200ebm03-01-m.webp, dimensionsWidth=1500, dimensionsHeight=1000}}}}
12:42:59,335 INFO  [com.gostophandle.ejb.MotorcyclesEJB] (default task-1) >>>>> 6.4 motorcycleApriliaMotoGuzzi = Document{{_id=61d70d6a8c9e88075702af58, manufacturer=Moto Guzzi, model=Le Mans, modelType=I, typesOf=Sport, dateProductionStarted=Thu Jan 01 00:00:00 GMT 1976, dateProductionEnded=Sat Jan 01 00:00:00 GMT 1977, engine=Document{{type=Four-Stroke, displacement=850.0, cylinder=2.0, capacityUnit=cc, carburation=null, bore=80.0, boreMeasurement=mm, stroke=74.0, strokeMeasurement=mm, distribution=null, maxiumPowerHp=85.0, maxiumPowerKilowatt=38.0, maxiumPowerRpm=6200.0, maximumTorque=60.0, maximumTorqueUnit=Nm, maximumTorqueRpm=4900.0}}, electrics=Document{{}}, colours=[Document{{colour=Red}}, Document{{colour=Silver Blue}}], accessories=[Document{{productNumber=MG0123456789, productName=Product 1}}, Document{{productNumber=MG0123456789, productName=Product 2}}], image=Document{{file=/Users/NOTiFY/IdeaProjects/GoStopHandle/images, url=/MotoGuzzi/1976/, png=motorcycle.png, dimensionsWidth=900, dimensionsHeight=440}}}}

JPA Specification join on fetch is not working (Hibernate, Spring Data JPA)

copy iconCopydownload iconDownload
if (fetch instanceof From) {
    From from = (From) fetch;
    renderJoins(jpaqlQuery, renderingContext, from.getJoins());
}

Getting docker containers to communicate with each other

copy iconCopydownload iconDownload
quarkus.oidc.auth-server-url=http://keycloak:8180/auth/realms/realm
ports:
      - "8180:8080"
-----------------------
quarkus.oidc.auth-server-url=http://keycloak:8180/auth/realms/realm
ports:
      - "8180:8080"

Quarkus with Panache getting hibernate error HHH000183

copy iconCopydownload iconDownload
quarkus.datasource.jdbc.new-connection-sql=alter session set current_schema=MYSCHEMA
quarkus.hibernate-orm.database.default-schema=MYSCHEMA
-----------------------
quarkus.datasource.jdbc.new-connection-sql=alter session set current_schema=MYSCHEMA
quarkus.hibernate-orm.database.default-schema=MYSCHEMA

Quarkus trouble with SQL Server (or any other database)

copy iconCopydownload iconDownload
<dependencies>
  ...
  <dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jdbc-mssql</artifactId>
  </dependency>
  ...
</dependencies>

How does one diagnose Quarkus REST service OIDC errors (specifically 403 forbidden)?

copy iconCopydownload iconDownload
quarkus.log.category."io.quarkus.oidc".level=TRACE

# The category io.quarkus.oidc already contains the errors generated by the jose-jwt library

Quarkus project

copy iconCopydownload iconDownload
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-universe-bom</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

Building native image using quarkus on a M1 Mac fails

copy iconCopydownload iconDownload
# Docker
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker
# Podman
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
file ./quarkus-spring-1.0-SNAPSHOT-runner
-----------------------
# Docker
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker
# Podman
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
file ./quarkus-spring-1.0-SNAPSHOT-runner

Community Discussions

Trending Discussions on hibernate-orm
  • Register additional persistence unit in Keycloak Quarkus
  • Why the class attributes in the quarku panache example are PUBLIC instead of PRIVATE
  • JPA single-table inheritance mapping and two relationships to sub classes fails with unexpected result (Hibernate )
  • Panache Entity - QuerySyntaxException unexpected token in panache entity during projection to DTO
  • LazyInitializationException in a Spring Transaction
  • How to limit my user creation method to one transaction at the time? (Container vs Transaction managed Concurrency)
  • Quarkus build failure in hibernate: Multiple persistence units are defined but the entities are not mapped to them
  • Create a dynamic Mongo query in Java
  • Error using RestResponse from RestEasy Reactive library
  • With Quarkus and Panache, specify the entities to use from an external library
Trending Discussions on hibernate-orm

QUESTION

Register additional persistence unit in Keycloak Quarkus

Asked 2022-Mar-16 at 11:25

We have a custom keyloak user storage provide to use our proprietary user database for authentication.

This works perfectly fine with the WildFly based Keycloak. Since Keycloak will drop WildFly support in june 2022 according to their release notes, I am currently trying to get it running in the new, Quarkus based Keycloak distribution.

First I had to remove all dependencies provided by Quarkus since those lead to class loader issues. But now I am stuck with this error when I try to start Keycloak with the command ./kc.sh start-dev --log-level=ERROR:

Updating the configuration and installing your custom providers, if any. Please wait.
ERROR: Unexpected error when starting the server in (development) mode
ERROR: Failed to start quarkus
ERROR: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
ERROR: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.

And 'hibernate.dialect' is set in persistence.xml and configuring a persistance unit in persistence.xml should be supported according to quarkus documentation :

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="example-pu" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.example.keycloak.provider.db.entity.Benutzer</class>
        <class>com.example.keycloak.provider.db.entity.BenutzerWithSource</class>
        <class>com.example.keycloak.provider.db.entity.Rolle</class>
        <class>com.example.keycloak.provider.db.entity.Parameter</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
        </properties>
    </persistence-unit>
</persistence>

Configuring the dialect in an application.properties (according to https://quarkus.io/guides/hibernate-orm#multiple-persistence-units) file in the delivery didn't change the behavior as well: quarkus.hibernate-orm."example-pu".hibernate-dialect=org.hibernate.dialect.OracleDialect

What am I missing?

ANSWER

Answered 2022-Mar-16 at 11:25

Additional Persistence Units are not supported in Keycloak 17.0.0 with Quarkus. This should be fixed in Keycloak 18.0.0: https://github.com/keycloak/keycloak/pull/10581.

Source https://stackoverflow.com/questions/71267230

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install hibernate-orm

You can download it from GitHub, Maven.
You can use hibernate-orm like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the hibernate-orm component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

Support

For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Share this Page

share link
Consider Popular Object-Relational Mapping Libraries
Compare Object-Relational Mapping Libraries with Highest Support
Compare Object-Relational Mapping Libraries with Highest Quality
Compare Object-Relational Mapping Libraries with Highest Security
Compare Object-Relational Mapping Libraries with Permissive License
Compare Object-Relational Mapping Libraries with Highest Reuse
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.